【问题标题】:Cannot find every HTML-tag in a parsed HTML?无法在已解析的 HTML 中找到每个 HTML 标记?
【发布时间】:2018-09-10 10:06:34
【问题描述】:

对于一个项目,我需要知道特定标签在 HTML 文件中出现的频率。 首先,我解析了 HTML 文件。 然后我使用.select() 来获取所有<time> 标签。 在 Chrome 的开发者工具中,我数了这个标签 25 次。 但 Python 数为 10。

import requests
from bs4 import BeautifulSoup

r=requests.get(URL)
doc=r.text
soup=BeautifulSoup(doc,'html.parser')

length=len(soup.select("time"))
print(length)                   #OUTPUT is 10 instead of 25

我发现 doc 包含 <time> 10 次。 但它不应该和我的浏览器显示的一样多吗? 我需要全部 25 个。是否可以解决所有 25 个问题? 我能做什么?

【问题讨论】:

  • 需要一个可重现的例子来进一步挖掘......但是,如果那些<time>s 是由 JavaScript 而不是纯静态 HTML 生成的,它可能没有你的浏览器那么多
  • 我不知道是不是这种情况,但是您应该小心抓取具有 javascript 渲染的网站。例如,我试图抓取一个使用 AJAX 加载其内容的网站,因此这意味着像您这样的简单脚本将在 ajax 完成之前接收网站的 HTML,因此不包含“所有”标签。跨度>
  • 您好,感谢您的回复。你的评论让我想到我应该再次检查该网站。那里有一个下拉菜单,您可以在其中设置应显示多少结果。您可以选择 10 、25、50 或 100。我选择了 10 复制了 URL 并在代码中更改了它,它给了我想要的结果。也许前 10 个是静态 HTML,其余是由 javascript 生成的?
  • @RafaelMarques 是的,我认为这发生在我身上。
  • 可以分享网址吗?没有它,您的问题就无法解决。

标签: python html parsing beautifulsoup html-parsing


【解决方案1】:

试试 soup.find_all() 方法 - 这通常对我有用

【讨论】:

  • 这不是问题所在。 soup.select('tag')soup.find_all('tag') 返回完全相同的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多