如何在 Beautiful Soup 中深入多个级别(find_all 错误)

Joe*_*oel 2 python beautifulsoup python-3.x

我试图在这个 Python 脚本中深入两个级别。我看到的所有示例都使用 find_all 向下钻取单个级别,并且我可以正常工作,但我无法深入到第三级别。这是我的代码片段:

main_table = soup.find("div",attrs={'class':'block-content'})
label_item_contents = main_table.find_all("div", attrs={'class':'label-item-description'})
links = label_item_contents.find_all("a")
print(links)
Run Code Online (Sandbox Code Playgroud)

这样做会出现错误“AttributeError:ResultSet 对象没有属性‘find_all’。”

如果我注释掉并更改打印,那么就是这样:

main_table = soup.find("div",attrs={'class':'block-content'})
label_item_contents = main_table.find_all("div", attrs={'class':'label-item-description'})
print(label_item_contents)
Run Code Online (Sandbox Code Playgroud)

然后我看到所有抓取的数据。我读到问题可能是 label_item_contents 变成了一个数组,所以我尝试这样做:

links = label_item_contents[].find_all("a")
Run Code Online (Sandbox Code Playgroud)

但后来我得到“SyntaxError:无效语法”

任何帮助表示赞赏!

编辑:这是当我使用 print(label_item_contents) 时在第二个示例中返回的 HTML 的一部分:

<div class="label-item-description">
    <div>
        <a href="/label/example.com"><strong>Example</strong></a>
    </div>
    <small>
        <i class="fa fa-facebook-official"></i> 342.4K
        <i class="fa fa-soundcloud"></i> 233.4K
    </small>
    <br />
    <small class="text-muted">
        Stockholm, Sweden
    </small>
    <br />
    <small class="text-muted">
        <b>Techno, Tech House</b>
    </small>
</div>, <div class="label-item-description">
Run Code Online (Sandbox Code Playgroud)

我只想到达<a href="/label/example.com">

Eve*_*ett 5

您可能想尝试一下 CSS 选择器——我发现它们更熟悉,而且重要的是,我发现它们引起的AttributeError问题更少。

例如,使用上面的内容,html您可以选择第一个锚标记,如下所示:

link = soup.select("div.label-item-description > div > a")
print(link[0]) # <a href="/label/example.com"><strong>Example</strong></a>
Run Code Online (Sandbox Code Playgroud)

请参阅文档:

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors