如何使用BeautifulSoup提取带有datareactid的span内容?

2024-06-26 14:00:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从雅虎财经网站this中提取Market Cap

enter image description here

enter image description here

我曾经

from bs4 import BeautifulSoup
import requests
url='https://finance.yahoo.com/quote/TXG?p=TXG&.tsrc=fin-srch'
wb_data=requests.get(url)
soup=BeautifulSoup(wb_data.text,'lxml')
cap = soup.find("span", class_ = "Trsdu(0.3s) ").get_text()
print(cap)

但是我得到了80.81(这是“上一次收盘”),而不是8.01B。这是因为“上一次收盘”共享同一类别。因此,我尝试使用data-reactid来限制搜索。如何做到这一点

我得到了答案,但它太奇怪了,它是attrs = {"data-reactid": "57"}而不是139


Tags: textimporturldataget网站requestscap
2条回答

试试这个:

from bs4 import BeautifulSoup
import requests
url='https://finance.yahoo.com/quote/TXG?p=TXG&.tsrc=fin-srch'
wb_data=requests.get(url)
soup=BeautifulSoup(wb_data.text,'lxml')
cap = soup.find("span", class_ = "Trsdu(0.3s) ").get('data-reactid')
print(cap)

find函数将任何未知关键字参数视为属性过滤器,因此要查找其id属性为foo的元素,您可以编写:

soup.find(id = "foo")

不能直接将data-class用作关键字参数,因为连字符使其在Python中成为非法标识符。但是美丽的乌苏has you covered

cap = soup.find("span", class_ = "Trsdu(0.3s) ", attrs = {"data-reactid": "85"})

请注意,依赖React id可能非常脆弱,因此最好依赖周围的元素,比如“市值”标签

相关问题 更多 >