【发布时间】: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