如何使用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_all
或select
。
以上是关于如何使用BeautifulSoup访问标签的属性值的主要内容,如果未能解决你的问题,请参考以下文章
python beautifulsoup将属性添加到没有值的标签
如何在 Python 中使用 BeautifulSoup 保存对 HTML 文件所做的更改?