我正在使用BeautifulSoup,并要求进行网络抓取。我知道如何在标签之间提取属性,但是如果我想要的是标签下面的数字'4.31'
,知道如何获取它吗?
<div class="starRating" title="4.31">
<svg
...
</svg>
</div>
我尝试过:
soup.find('div',{'class':'starRating'})
soup.find('title')
什么都不返回,所以数字基本上就是标签...
答案 0 :(得分:0)
您可以像这样读取属性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”。您可以通过将标签视为字典来访问标签的属性
答案 1 :(得分:0)
您可以使用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
。