自雅虎财经更新其网站以来。一些表似乎是动态创建的,而不是实际存储在HTML中(我曾经使用BeautifulSoup获取此信息,urllib但这已经不再适用了)。我在分析师表格之后,例如ADP,特别是年度EPS(当前年度列)的收益预测。您无法从API获取此信息。
我发现此链接适用于Analyst Recommendations Trends。有谁知道如何为此页面上的主表做类似的事情? (链接: python lxml etree applet information from yahoo)
我试图遵循所采取的步骤,但坦率地说,它超越了我。 返回整个表是我需要的,我可以从那里挑选出来。欢呼声
答案 0 :(得分:4)
要获取该数据,您需要打开Chrome DevTools并选择带XHR过滤器的网络选项卡。如果单击ADP请求,您可以在RequestUrl中看到链接。
您可以使用Requests库发出请求并解析网站上的json响应。
import requests
from pprint import pprint
url = 'https://query1.finance.yahoo.com/v10/finance/quoteSummary/ADP?formatted=true&crumb=ILlIC9tOoXt&lang=en-US®ion=US&modules=upgradeDowngradeHistory%2CrecommendationTrend%2CfinancialData%2CearningsHistory%2CearningsTrend%2CindustryTrend%2CindexTrend%2CsectorTrend&corsDomain=finance.yahoo.com'
r = requests.get(url).json()
pprint(r)
答案 1 :(得分:1)
进一步发表上述答案,并使用上面发布的链接中的答案。 (归功于saaj)。这只提供了我需要的数据集,并且在调用模块时更整洁。我不确定参数crumb是什么,但它没有它似乎工作正常。
import json
from pprint import pprint
from urllib.request import urlopen
from urllib.parse import urlencode
def parse():
host = 'https://query1.finance.yahoo.com'
#host = 'https://query2.finance.yahoo.com' # try if above doesn't work
path = '/v10/finance/quoteSummary/%s' % 'ADP'
params = {
'formatted' : 'true',
#'crumb' : 'ILlIC9tOoXt',
'lang' : 'en-US',
'region' : 'US',
'modules' : 'earningsTrend',
'domain' : 'finance.yahoo.com'
}
response = urlopen('{}{}?{}'.format(host, path, urlencode(params)))
data = json.loads(response.read().decode())
pprint(data)
if __name__ == '__main__':
parse()
其他模块(只需在它们之间添加逗号): assetProfile 财务数据 defaultKeyStatistics calendarEvents incomeStatementHistory cashflowStatementHistory balanceSheetHistory recommendationTrend upgradeDowngradeHistory earningsHistory earningsTrend industryTrend
答案 2 :(得分:0)
在GitHub中,c0redumb提出了一个完整的解决方案。您可以下载yqd.py。导入后,您可以通过一行代码获取雅虎财务数据。
import yqd
yf_data = yqd.load_yahoo_quote('GOOG', '20170722', '20170725')
结果' yf_data'是:
['Date,Open,High,Low,Close,Adj Close,Volume',
'2017-07-24,972.219971,986.200012,970.770020,980.340027,980.340027,3248300',
'2017-07-25,953.809998,959.700012,945.400024,950.700012,950.700012,4661000',
'']