python - BeautifulSoup:findAll 找不到标签

标签 python web-scraping beautifulsoup

我对我发布的许多问题感到抱歉,但我不知道如何处理这个错误:测试此page时,简单的p

ab=soup.find("article", {"itemprop":"articleBody"})
p=ab.findAll("p")
print(len(p))  #gives 1

有很多p标签,但我只得到第一个。 我尝试复制粘贴整个<article itemprop="articleBody"> html 文本转换为字符串并将其传递给新的 BeautifulSoup目的。搜索该对象 p给出了所有所需的标签 (14)。

为什么通常的方法不起作用?是p标签在这里动态加载(但是html代码看起来很正常)?

最佳答案

问题在于解析器:

In [21]: req = requests.get("http://www.wired.com/2016/08/cape-watch-99/")

In [22]: soup = BeautifulSoup(req.content, "lxml")

In [23]: len(soup.select("article[itemprop=articleBody] p"))
Out[23]: 26

In [24]: soup = BeautifulSoup(req.content, "html.parser")

In [25]: len(soup.select("article[itemprop=articleBody] p"))
Out[25]: 1
In [26]: soup = BeautifulSoup(req.content, "html5lib")

In [27]: len(soup.select("article[itemprop=articleBody] p"))
Out[27]: 26

您可以看到 html5liblxml 获取所有 p 标签,但标准 html.parser 也无法处理损坏的 html。通过 validator.w3 运行文章 html你会得到很多输出,特别是:

enter image description here

关于python - BeautifulSoup:findAll 找不到标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029430/

相关文章:

java - python解释器到底是用什么实现的?

python - 使用 dj-stripe 订阅多个订阅

python - 使用 selenium 从网站获取跨度文本

python - 如何解决 AttributeError : 'NoneType' object has no attribute 'encode' in python

Python 为属性文件中的特定键设置值

python - "While True Loop"不会导致函数再次执行

javascript - 使用 webkitbrowser 获取通过注入(inject)的 javascript 修改的输入文本的值时出错

python - 我如何摆脱像 ' 这样出现而不是撇号的字符?

python - 无法使用 BS4 从表格中仅提取可见文本

python - 如何提高比较列表元素的效率?