我正在努力寻找如何让它发挥作用。
我从网站上抓取了一些数据,但内容放在没有类的表中。就这个问题而言,我正在运行它来找出我正在搜索的单词在哪里:
item = soup.find_all(text=re.compile('WORD'))
然后,由于其他内容位于同一父项中,我这样做:
parent = item.find_parent('tr')
现在,我得到了这样的东西:
<tr>
<td class="someclass1">WORD</td>
<td class="someclass2">TIRE</td>
<td class="someclass3">GUN</td>
<td class="someclass4">CAR</td>
<td class="someclass5">BYCICLE</td>
</tr>
既然它确实找到了WORD所在的好地方,那么我应该如何从其中取出GUN或CAR呢?正如我所说,这里的主要问题是,有多个表具有相同的 TD CLASSES,但其中只有 1 个具有 WORD。该表中的内容就是我要查找的内容。
在 bs4 4.7.1 + 中,您可以使用 :contains
和 :has
根据给定类元素中的 WORD
进行隔离在一个表内。在您描述的情况下,您也可以直接在 table
上工作 :contains
,即 table = soup.select_one('table:contains("WORD")')
.
from bs4 import BeautifulSoup as bs
html = '''
<html>
<head></head>
<body>
<table>
<tbody>
<tr>
<td class="someclass1">WORD</td>
</tr>
</tbody>
</table>
<table></table>
<table>
<tbody>
<tr>
<td class="someclass1">NOT_WORD</td>
</tr>
</tbody>
</table>
<table></table>
</body>
</html>
'''
soup = bs(html, 'lxml')
table = soup.select_one('table:has(.someclass1:contains("WORD"))')
print(table.text)
我是一名优秀的程序员,十分优秀!