您如何在python中使用beautifulsoup从“ span”标签和“ data-reactid”中抓取数据?

时间:2019-04-08 05:13:46

标签: python html python-3.x web-scraping beautifulsoup

我正在尝试从Yahoo Finance提取股票的实时价格数据。该信息包含在带有“类”和“数据反应堆”的“ span”标签中。我无法从该span标签中提取信息。

输入代码时,我没有得到任何输出,也没有得到任何错误。

对于这个问题,我几乎尝试了所有其他答案,但没有一个对我有用。

<--HTML Code-->
<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="34">197.00</span>
#Python Script
my_url = "https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch"
u_client = u_req(my_url)

page_html = u_client.read()
u_client.close()

page_soup = soup(page_html, "html.parser")
container = page_soup.find('span', {"data-reactid":'34'})

我希望将输出“ 197.00”(股票的实时价格)作为输出。

4 个答案:

答案 0 :(得分:0)

以某种方式在读取URL时将数据反应池更改为14。

page_soup = soup(page_html, "html.parser")
container = page_soup.find('span', {"data-reactid":'14'})
if container:
    print(container.text)

答案 1 :(得分:0)

鉴于data-reactid可以更改,我将使用唯一的类进行选择。按班级选择也更快。

import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://finance.yahoo.com/quote/AAPL/')
soup = bs(r.content, 'lxml')
print(soup.select_one('.Mb\(-4px\)').text)

答案 2 :(得分:0)

我打开了Chrome中的URL,然后按F12键。点击网络标签,从以下页面显示此查询:https://query1.finance.yahoo.com/v8/finance/chart/AAPL?region=US&lang=en-US&includePrePost=false&interval=2m&range=1d&corsDomain=finance.yahoo.com&.tsrc=finance

我建议您探索底层的AJAX调用,这些调用似乎呈现格式正确的JSON结果,并查看URL中可以修改的许多参数。

答案 3 :(得分:0)

您可以通过多种方式获取该信息。这是其中之一:

import requests
from bs4 import BeautifulSoup

res = requests.get('https://finance.yahoo.com/quote/AAPL')
soup = BeautifulSoup(res.text, 'lxml')
price = soup.select_one('#quote-market-notice').find_all_previous()[2].text
print(price)

另一种方式:

price = soup.select_one("[class*='smartphone_Mt'] span").text
print(price)