使用BeautifulSoup通过雅虎财经搜索

R.M*_*.M. 3 python beautifulsoup yahoo-finance

我正试图从"关键统计"页面获取雅虎中的股票代码(因为Pandas库不支持).

AAPL示例:

from bs4 import BeautifulSoup
import requests

url = 'http://finance.yahoo.com/quote/AAPL/key-statistics?p=AAPL'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')

enterpriseValue = soup.findAll('$ENTERPRISE_VALUE', attrs={'class': 'yfnc_tablehead1'}) #HTML tag for where enterprise value is located

print(enterpriseValue)
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢安迪!

问题:这是打印一个空数组.如何更改我findAll的返回598.56B

n1c*_*1c9 5

那么,find_all返回的列表为空的原因是因为该数据是通过单独的调用生成的,而该调用仅通过GET向该URL 发送请求而未完成.如果您浏览Chrome/Firefox上的"网络"标签并按XHR过滤,通过检查每个网络操作的请求和响应,您可以找到您应该发送GET请求的URL .

在这种情况下,https://query2.finance.yahoo.com/v10/finance/quoteSummary/AAPL?formatted=true&crumb=8ldhetOu7RJ&lang=en-US&region=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com正如我们在这里看到的那样: 在此输入图像描述

那么,我们如何重新创建呢?简单!:

from bs4 import BeautifulSoup
import requests

r = requests.get('https://query2.finance.yahoo.com/v10/finance/quoteSummary/AAPL?formatted=true&crumb=8ldhetOu7RJ&lang=en-US&region=US&modules=defaultKeyStatistics%2CfinancialData%2CcalendarEvents&corsDomain=finance.yahoo.com')
data = r.json()
Run Code Online (Sandbox Code Playgroud)

这将返回JSON响应为dict.从那里,导航dict直到找到您所追踪的数据:

financial_data = data['quoteSummary']['result'][0]['defaultKeyStatistics']
enterprise_value_dict = financial_data['enterpriseValue']
print(enterprise_value_dict)
>>> {'fmt': '598.56B', 'raw': 598563094528, 'longFmt': '598,563,094,528'}
print(enterprise_value_dict['fmt'])
>>> '598.56B'
Run Code Online (Sandbox Code Playgroud)

  • 查看 https://automatetheboringstuff.com/chapter11/,如果您确实想深入了解,请考虑 http://shop.oreilly.com/product/0636920034391.do 。这是一项很棒的技能。 (2认同)