python - BeautifulSoup 在某些下载请求中拾取 div 对象,但在其他下载请求中拾取 div 对象

标签 python html beautifulsoup

我正在使用 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')

引用: Differences between parsers

关于python - BeautifulSoup 在某些下载请求中拾取 div 对象,但在其他下载请求中拾取 div 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58310041/

相关文章:

html - 在重复的背景图像之间创建空间 - HTML

javascript - 如何像 youtube 那样欺骗 HTML5 视频标签中的 src 属性

python - 如何在 BeautifulSoup 4 中找到明文同级?

python - 使用 BeautifulSoup 获取 div 的分隔内容

javascript - 为什么此请求不遵循我的 Tornado 重定向?

python - 使用计划任务扩展 Heroku

javascript - 检查 html Canvas 上特定区域的点位置

python - 如何在 Python 中使用正则表达式从 HTML <a> 标签中提取 Facebook 页面 URL?

javascript - 从 Javascript 中的字典数组中获取数据

python - 有没有办法在 python 中打乱列表?