使用BeautifulSoup查找含指定文本的td标签匹配不全如何解决
问题原因
你原写法中find_all的text参数传入的回调函数,接收的是td标签下每一个独立的直接子文本节点,而非整个td标签的全部拼接文本。第一个td标签内含<a>子标签,"keyword"仅存在于第一个直接子文本片段中,原有判断逻辑无法将该td整体判定为匹配,只有无其他子标签、全部为纯文本的td会被正确匹配。
解决方法
有两种常用实现方式,都可以拿到预期的两个匹配td:
方法1:遍历td后判断完整文本
先取出所有td标签,再通过get_text()方法获取td的全部拼接文本做判断:
soup = BeautifulSoup(html, 'lxml') ans = [td for td in soup.find_all('td') if 'keyword' in td.get_text()] print(ans)
方法2:使用CSS选择器
直接用bs4支持的:contains伪类选择器,一行代码即可完成筛选:
soup = BeautifulSoup(html, 'lxml') ans = soup.select('td:contains("keyword")') print(ans)
内容的提问来源于stack exchange,提问作者user7864386
相关产品推荐
相关产品推荐

