Python 我如何在美丽的汤中潜水到多个层次(查找所有错误)

Python 我如何在美丽的汤中潜水到多个层次(查找所有错误),python,python-3.x,beautifulsoup,Python,Python 3.x,Beautifulsoup,我试图在这个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

我试图在这个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)
这样做会导致错误“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)
然后我看到了所有的数据。我了解到问题可能是label_item_内容变成了一个数组,所以我尝试这样做:

links = label_item_contents[].find_all("a")
但是我得到了“SyntaxError:无效语法”

感谢您的帮助

编辑:这是第二个示例中使用print(label\u item\u contents)时返回的HTML的一部分:


342.4K
233.4K

瑞典斯德哥尔摩
科技屋 ,

我只想进入

不确定它是否正确,但为什么不这样做呢?您可以链接
find
,以获得所需的子div:

html= """
<div class="block-content">
    <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"></div>
</div>  """

soup=BeautifulSoup(html)
print(soup.find('div', {'class': 'block-content'}).find('div',  {'class':"label-item-description"}).find('a'))
html=”“”
342.4K
233.4K

瑞典斯德哥尔摩
科技屋 , """ soup=BeautifulSoup(html) 打印(soup.find('div',{'class':'block content'})。find('div',{'class':“label item description”})。find('a'))
输出:

<a href="/label/example.com"><strong>Example</strong></a>

您可能想尝试一下CSS选择器——我发现它们更熟悉,更重要的是,我发现它们导致的
属性错误问题更少

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

link = soup.select("div.label-item-description > div > a")
print(link[0]) # <a href="/label/example.com"><strong>Example</strong></a>
link=soup.select(“div.label-item-description>div>a”)
打印(链接[0])#
见文件:


有时我们使用锚定标记,但它不包含
href
属性

您可以尝试使用
find_all
函数,它总是返回一个列表,并使用带有锚定标记的
href=True
属性将为您提供具有
href
属性的所有链接

main_table = soup.find("div",{'class':'label-item-description'})
links = main_table.find_all("a",href=True)
print(links)

您还可以使用另外两种选择:

links = [item['href'] for item in soup.select('.label-item-description a')]
links2 = [item['href'] for item in soup.select('.label-item-description [href^="/label/"]')]

发布你的html,这样我们就可以有一个idea@SebastienD当我使用print(label\u item\u contents)时生成的html?好吧,您用于您的soup变量的html,即:
soup=BeautifulSoup(html)
还有很多其他的好方法,它们似乎工作得很好,并且去掉了我一半的代码!谢谢
links = [item['href'] for item in soup.select('.label-item-description a')]
links2 = [item['href'] for item in soup.select('.label-item-description [href^="/label/"]')]