我对我发布的许多问题感到抱歉,但我不知道如何处理这个错误:测试此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
您可以看到 html5lib 和 lxml 获取所有 p 标签,但标准 html.parser 也无法处理损坏的 html。通过 validator.w3 运行文章 html你会得到很多输出,特别是:
关于python - BeautifulSoup:findAll 找不到标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029430/