BeautifulSoup(html, "html.parser") 和 BeautifulSoup(html, "xml") 有不同的查找行为,如何使其相同?

问题描述 投票:0回答:1

使用

soup_html = BeautifulSoup(html, "html.parser")
解析 HTML 使用默认解析器。

使用

soup_xml = BeautifulSoup(html, "xml")
解析 HTML 使用 lxml lib 中的解析器。

如果 HTML 有这样的元素

<div class="a b"/>

element = soup_html.find("div", class_="a")

将返回一个元素,它似乎在“部分”查找模式下工作

另一方面

element = soup_xml.find("div", class_="a")

回归

None

如何使 soup_xml 以与 soup_html 相同的方式工作并进行部分查找?

解决方法是将 find 替换为 CSS_SELECTOR

element = soup_xml.select_one("div.a")
...但是,现在代码中有很多地方需要仔细替换,而且我也认为 find 可能比 select_one 快一点。

web-scraping beautifulsoup lxml
1个回答
0
投票

如果只是拼写错误,解决方案是使用

lxml
parser
BeautifulSoup
默认也会使用它。

from bs4 import BeautifulSoup

html = '''
<div class="a b"/>
'''

soup = BeautifulSoup(html, "lxml")
soup.find("div", class_="a")
© www.soinside.com 2019 - 2024. All rights reserved.