BeautifulSoup4标签内容未显示

时间:2020-09-08 12:34:45

标签: html python-3.x beautifulsoup

我试图从某个网站上抓取一些数据,结果发现BeautifulSoup4并未显示我期望的全部内容。在下面的第一个示例中,一切正常。找到带有“ title”类的标签后,它显示出其内容中包含两个元素(NavigableText:Bag of Holding和Span标签)。

<h1 class="title">
    Bag of Holding
    <span style="float:right;">
        Item 4+
    </span>
</h1>

Content of 'title' tag from first example

不幸的是,在第二种情况下,找到标题的方式与返回仅包含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>

Content of 'title' tag from second example

我是否遗漏了一些明显的东西,这会使两种情况下的标题和跟随范围的字符串保持一致?

编辑: 我发现问题在于解析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>,它也关闭了标题标签。

1 个答案:

答案 0 :(得分:0)

实际上,问题出在错误的html响应中。 <a>标签在嵌套<span>标签之前被关闭,这导致默认html.parser出现问题。我通过将html5lib解析器与BeautifulSoup(BeautifulSoup(page.text, 'html5lib'))一起使用来解决了这个问题。