我正在使用 python 的 bs4 模块来解析 HTML。然而,我遇到了一个奇怪的错误。
当下载页面 HTML 进行解析时,我注意到 BS4 会识别某些页面中的 div 对象,但不能识别其他页面中的 div 对象,即使我引用的特定对象存在于两个页面中并且路径相同。
例如
<div class = "item" data-year = "19-20">
<div class = "irrelevant">...</div>
<div class = "irrelevant">...</div>
<div class = "stats-grids">...</div>
<div class = "irrelevant">...</div>
</div>
我做了一些挖掘,发现经常有人提出这样的问题可能是由于网页中使用 Java 而导致的,而不是显示在 HTML 中。然而,我认为在这种情况下情况并非如此,因为 BS4 正确地识别了代码保持不变的其他实例中的路径。
使用时...
res = requests.get('examplesite.com')
soup = bs4.BeautifulSoup(res.text, 'html.parser')
element = soup.select('div[data-year = "19-20"] > div[class = "stats-grids"]')
对于来自同一网站的某些页面,元素是正确的。其他时候,它可以彼此独立地找到 div[data-year = "19-20"] 和 div[class = "stats-grids"],但当我指定其中一个是另一个的子级时则不会。
换句话说,它就在那里,但只有当我指定统计网格位于数据年份内时,它才不会显示。
最佳答案
出现这种情况可能是由于网站的 HTML 不正确(例如标签未关闭)。
尝试使用 html5lib 。它将尝试通过添加附加标签来创建格式良好的 HTML 文档。
使用安装
pip install html5lib
并在 BeautifulSoup 构造函数中指定它
soup = bs4.BeautifulSoup(res.text, 'html5lib')
关于python - BeautifulSoup 在某些下载请求中拾取 div 对象,但在其他下载请求中拾取 div 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58310041/