如何在python中用漂亮的汤从div中find_all(id)

Las*_*oth 5 python beautifulsoup

我想从具有唯一类的页面中打印出所有 ID。

我想用 Beautiful Soup 抓取的页面是这样的:

<div itemscope itemprop="item" itemtype="http://schema.org/Product" id="12345" class="realestate"> 
<div class="contentArea"> 
<meta itemprop="name" content="Name - 12345 " /> 
<meta itemprop="url" content="https://url12345.hu" />   
<meta itemprop="category" content="category1" />   
</div>
</div>
<div itemscope itemprop="item" itemtype="http://schema.org/Product" id="12346" class="realestate"> 
<div class="contentArea"> 
<meta itemprop="name" content="Name - 12346 " /> 
<meta itemprop="url" content="https://url12346.hu" />   
<meta itemprop="category" content="category1" />   
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

“ID”是来自 Itemscope DIV 的唯一标识符,所以我想以某种方式提取这些唯一 ID 并将它们全部打印出来(原因是将所有其他广告信息附加到此 ID(例如名称、URL 等)之后)

我尝试使用此 python 代码,但它不起作用。

import requests
from bs4 import BeautifulSoup

page = requests.get('searchResultPage.url')
soup = BeautifulSoup(page.text, 'html.parser')
id = soup.find_all('id')
print(id)
Run Code Online (Sandbox Code Playgroud)

它返回一个空列表。

我期望的是,我想要的是从 div 中取回带有 ID-s 的列表,这样:12345 12346

提前感谢您的帮助!

R. *_*tor 5

HS-nebula 是正确的, find_all 查找某种类型的标签,在你的汤中 id 是一个属性而不是一种标签类型。要获得汤中所有 id 的列表,您可以使用以下一个衬垫

ids = [tag['id'] for tag in soup.select('div[id]')]
Run Code Online (Sandbox Code Playgroud)

这使用 CSS 选择器而不是 bs4 的 find_all,因为我发现 bs4 的文档缺乏关于其内置的文档。

所以它soup.select所做的是返回一个包含所有 div 元素的列表,这些元素具有一个名为“id”的属性,然后我们循环遍历该 div 标签列表并将“id”属性的值添加到 ids 列表中。