我试图从某个网站上抓取一些数据,结果发现BeautifulSoup4并未显示我期望的全部内容。在下面的第一个示例中,一切正常。找到带有“ title”类的标签后,它显示出其内容中包含两个元素(NavigableText:Bag of Holding和Span标签)。
<h1 class="title">
Bag of Holding
<span style="float:right;">
Item 4+
</span>
</h1>
不幸的是,在第二种情况下,找到标题的方式与返回仅包含1个元素的内容的方式相同,我希望其中包含3个元素。我希望内容包含'a'标签,文本和跨度,但似乎它只有“ a”标签。进入NavigableText真的很困难,因为它只能作为'img'的'next'元素来访问。
<h1 class="title">
<a href="PFS.aspx">
<span style="float:left;">
<img alt="PFS Standard" title="PFS Standard" style="height:25px; padding:2px 10px 0px 2px" src="Images\Icons\PFS_Standard.png">
</span>
</a>
Adventurer's Pack
<span style="float:right;">
Item 0
</span>
</h1>
我是否遗漏了一些明显的东西,这会使两种情况下的标题和跟随范围的字符串保持一致?
编辑: 我发现问题在于解析html响应,因为它将第二个示例中的一个更改为:
<h1 class="title">
<a href="PFS.aspx">
<span style="float:left;">
<img alt="PFS Standard" src="Images\Icons\PFS_Standard.png" style="height:25px; padding:2px 10px 0px 2px" title="PFS Standard"/>
</span>
</a>
</h1>
</span>
Adventurer's Pack
<span style="float:right;">
Item 0
</span>
这似乎是由返回的html引起的,即使在原始html中看起来好像</a>
出现在</span>
之前,这让我认为BeautifulSoup看到类似这样的内容会自动关闭标签,然后找到下一个</span>
,它也关闭了标题标签。
答案 0 :(得分:0)
实际上,问题出在错误的html响应中。 <a>
标签在嵌套<span>
标签之前被关闭,这导致默认html.parser
出现问题。我通过将html5lib
解析器与BeautifulSoup(BeautifulSoup(page.text, 'html5lib')
)一起使用来解决了这个问题。