美丽的汤 - 忽略""<span>,同时为"find()"方法提供"字符串"



我正在用Python解析一些文本,使用BeautifulSoup4。

地址块以这样的单元格开头:

<td><strong>Address</strong></td>

我发现上面的单元格使用soup.find("td", "Address")

但是,现在一些地址也有高亮字符,像这样:

<td><strong><span>*</span>Address</strong></td>

这已经破坏了我的匹配。还有办法找到这个TR吗?

您可以尝试使用CSS selector or re如下:

soup.select('td:has(strong:contains("Address"))')

import re
soup.find("td", text=re.compile("Address"))

我最终得到了这样一个解决方案:

strong_blocks = soup.find_all("strong")
def common_block(tag):
return tag.find(string="Address", recursive=False)
address_texts = list(filter(common_block, strong_blocks))
if len(address_texts) == 1:
address_text = address_texts[0]
address_cell = address_text.parent

技巧是,一旦我有了<strong>元素的列表,我就能够使用recursive=False来防止<span>被检查。