我正在用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>
被检查。