2017-04-11 17 views
1

ヤフーファイナンスがウェブサイトを更新して以来。一部のテーブルは動的に作成され、実際にはHTMLに格納されていないようです(私はこの情報をBeautifulSoup、urllibを使用して取得していましたが、これはもう動作しません)。私はアナリストの表の後ろにある、例えばADP、具体的には、年前のEPSの収支見積もり(当年の列)です。この情報をAPIから取得することはできません。python web-scraping yahoo finance

このリンクはアナリストの推奨動向に適しています。誰でもこのページのメインテーブルと同様のことをする方法を知っていますか? (リンク: python lxml etree applet information from yahoo

私は取った手順に従いましたが、率直に私を超えました。 テーブル全体を返すだけで、そこからビットを選ぶことができます。歓声

+0

あなたは[API](http://meumobi.github.io/stocks%20apis/2016/を経由して利用できる必要があるデータではありません03/13/get-realtime-stock quotes-yahoo-finance-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/ja/master/user/quickstart/#json-response-content)を使用します。 – vold

+0

こんにちは。エンドポイントのURLはどうやって取得できましたか?私は任意のティッカーのために動的にこのようなURLを生成することができる必要があります。私はあなたが言うようにデータを解析する必要があるというデータがあることがわかります。 –

答えて

2

このデータを取得するには、Chrome DevToolsを開き、XHRフィルタを使用して[ネットワーク]タブを選択する必要があります。 ADPリクエストをクリックすると、RequestUrlのリンクが表示されます。

enter image description here

あなたは要求を行って、サイトからのJSONレスポンスを解析するためRequestsライブラリを使用することができます。

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への信用)。これは、私が必要とするデータセットだけを提供し、モジュールを呼び出すときにはきれいです。パラメータのクラムが何であるか分かりませんが、それがなければ正常に動作するようです。

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() 

他のモジュール(単にそれらの間にカンマを追加):GitHubので assetProfile financialData defaultKeyStatistics calendarEvents incomeStatementHistory cashflowStatementHistory balanceSheetHistory recommendationTrend upgradeDowngradeHistory earningsHistory earningsTrend industryTrend

0

c0redumbは全体的な解決策を提案している。 yqd.pyをダウンロードできます。インポート後、ヤフーの財務データを1行のコードで吹き飛ばすことができます。

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', 
''] 
関連する問題