Django 如何使用BeautifulSoup搜索在另一个元素之前出现的元素?

Django 如何使用BeautifulSoup搜索在另一个元素之前出现的元素?,django,python-3.x,beautifulsoup,Django,Python 3.x,Beautifulsoup,我将Beautifulsoup4与Python3.7一起使用。我有下面的HTML <tr> <td class="info"><div class="title">...</div></td> </tr> <tr class="ls"> <td colspan="3">Less similar results</td> </tr> <tr>

我将Beautifulsoup4与Python3.7一起使用。我有下面的HTML

<tr>
    <td class="info"><div class="title">...</div></td>
</tr>
<tr class="ls">
    <td colspan="3">Less similar results</td>
</tr>
<tr>
    <td class="info"><div class="title">...</div></td>
</tr>
但这将返回该类的所有div,即使是在我要筛选的元素之后出现的div。我如何改进搜索,使其只包含该particualr TD之前的结果?

试试这个-

o = []
for td in soup.find("td", class_="info"):
    if td.get_text() == 'Less similar results':
        break
    for div in td.findChildren("div", class_='title'):
        o.append(div.get_text())

print(o)

我们可以换一种方式,首先关注

from bs4.element import Tag

ls = soup.find('tr', class_='ls')
elts = [td for tr in ls.previous_siblings
           if isinstance(tr, Tag)
           for td in tr.find_all('td', class_='info')]
来自bs4.element导入标记的

ls=soup.find('tr',class='ls')
elts=[td表示ls中的tr。以前的兄弟姐妹
如果isinstance(tr,标签)
对于tr中的td.find_all('td',class='info')]
这给了我们:

>>> elts
[<td class="info"><div class="title">...</div></td>]
>>elts
[...]

因此,我们首先用一个
class=“ls”
来定位
tr
,然后迭代它以前的同级并查找
s。

您可以使用CSS选择器
tr:not(tr:has(td:contains(“不太相似的结果”)~*)div.title

data = '''<tr>
    <td class="info"><div class="title">THIS YOU WANT ...</div></td>
</tr>
<tr class="ls">
    <td colspan="3">Less similar results</td>
</tr>
<tr>
    <td class="info"><div class="title">THIS YOU DON'T WANT ...</div></td>
</tr>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')

print(soup.select('tr:not(tr:has(td:contains("Less similar results")) ~ *) div.title'))
data=''
这是你想要的。。。
不太相似的结果
这是你不想要的。。。
'''
从bs4导入BeautifulSoup
soup=BeautifulSoup(数据'lxml')
打印(soup.select('tr:not(tr:has(td:contains(“不太相似的结果”))~*)div.title'))
印刷品:

[<div class="title">THIS YOU WANT ...</div>]
[这是您想要的…]
这是什么意思?

tr:not(tr:has(td:contains(“不太相似的结果”)~*)div.title

选择带有类
标题的
,该标题位于
下,该标题位于
之前,其中包含
,且
具有
“不太相似的结果”

进一步阅读:

是否总是在
中定义“不太相似的结果”?
[<div class="title">THIS YOU WANT ...</div>]