如何使用BeautifulSoup访问标签的属性值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用BeautifulSoup访问标签的属性值相关的知识,希望对你有一定的参考价值。

我正在使用BeautifulSoup,并要求进行网络抓取。我知道如何在标签之间提取属性,但是如果我想要的是标签下面的数字'4.31',知道如何获取它吗?

<div class="starRating" title="4.31">
<svg
 ...
</svg>
</div>

我尝试过:

soup.find('div',{'class':'starRating'})
soup.find('title')

不会返回任何内容,因此数字基本上是标记...

答案

您可以像这样读取属性title的值:

from bs4 import BeautifulSoup


response = """
<html>
<div class="starRating" title="4.31">
<svg>
</svg>
</div>
</html>
"""

soup = BeautifulSoup(response, 'lxml')
print(soup.find('div', {'class': 'starRating'})['title'])

输出:

4.31

请参见https://www.crummy.com/software/BeautifulSoup/bs4/doc/#attributes`

标签可以具有任意数量的属性。标签<b id="boldest">具有属性“ id”,其值为“ boldest”。您可以通过将标签视为字典来访问标签的属性

另一答案

您可以使用lambda查询具有匹配的title属性的元素,然后使用["title"]键提取所需的数据:

>>> soup.find(lambda x: x.name == "div" and "title" in x.attrs)["title"]
'4.31'

或使用CSS选择器:

>>> soup.select_one("div[title]")
<div class="starRating" title="4.31"></div>

更容易,将target属性用作kwarg:

>>> soup.find("div", title=True)
<div class="starRating" title="4.31"></div>

尝试将title属性从不具有此属性的元素中拉出将引发KeyError,因此值得提前进行过滤。如果要迭代多个结果,请使用find_allselect

以上是关于如何使用BeautifulSoup访问标签的属性值的主要内容,如果未能解决你的问题,请参考以下文章

python beautifulsoup将属性添加到没有值的标签

如何在 Python 中使用 BeautifulSoup 保存对 HTML 文件所做的更改?

使用 BeautifulSoup 拉取标签值

beautifulsoup 对象如何能够将标签作为属性?

如何从 BeautifulSoup4 中的 html 标签中找到特定的数据属性?

如何通过beautifulsoup中的“class”属性捕捉标签? [复制]