2017-04-11 125 views
1

由于雅虎财务更新了他们的网站。有些表似乎是动态创建的,并没有真正存储在HTML中(我曾经使用BeautifulSoup,urllib获取这些信息,但这不再起作用)。我在分析师表之后,例如ADP,特别是每年每股收益的盈利预测(本年度专栏)。您无法从API获取这些信息。python web-scraping雅虎财务

我发现这个链接适合分析师建议趋势。有没有人知道如何做一些类似的主页在这个页面上? (LINK: python lxml etree applet information from yahoo

我试图按照所采取的步骤,但坦率地说,它超越了我。 返回整个表是我所需要的,我可以从那里挑出一些点。欢呼声

+0

你是不是需要通过[API]提供的数据(http://meumobi.github.io/stocks%20apis/2016/ 3月13日/获取实时股票引号 - 雅虎 - 融资 - api.html)? – fedterzi

+0

您可以使用此[端点](https://query2.finance.yahoo.com/v10/finance/quoteSummary/ADP?formatted=true&crumb=.U2WzFPwWfy&lang=en-US®ion=US&modules=upgradeDowngradeHistory%2CrecommendationTrend%2CfinancialData%2CearningsHistory% 2CearningsTrend%2CindustryTrend%2CindexTrend%2CsectorTrend&corsDomain = finance.yahoo.com)。它以json格式返回所有需要的数据。为了解析这些数据,你可以使用[Request](http://docs.python-requests.org/en/master/user/quickstart/#json-response-content)。 – vold

+0

嗨vold。你是如何获得该端点url的?我需要能够为任何股票动态生成这样的网址。我可以看到数据在那里,我需要做的就是像你说的那样解析它。 –

回答

2

为了获取该数据,您需要打开Chrome开发工具并选择带XHR过滤器的网络选项卡。如果您点击ADP请求,您可以在RequestUrl中看到链接。

enter image description here

可以使用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&region=US&modules=upgradeDowngradeHistory%2CrecommendationTrend%2CfinancialData%2CearningsHistory%2CearningsTrend%2CindustryTrend%2CindexTrend%2CsectorTrend&corsDomain=finance.yahoo.com' 
r = requests.get(url).json() 
pprint(r) 
+0

欢呼声对我有用:) –

0

更进一步volds答案上面和使用我在上面张贴的链接的答案。 (信贷给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 financialData defaultKeyStatistics calendarEvents incomeStatementHistory cashflowStatementHistory balanceSheetHistory recommendationTrend upgradeDowngradeHistory earningsHistory earningsTrend industryTrend

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', 
'']