2016-08-30 5 views
3

私はYahooのティッカーについての情報を取得しようとしています(これはPandasライブラリではサポートされていないためです)。 AAPLためBeautifulSoupを使用してYahoo Financeから検索する

例:

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) 

編集:おかげでアンディ!

質問:これは、空の配列を印刷しています。 findAll598.56Bに変更するにはどうすればよいですか?

答えて

5

find_allが返されるリストが空である理由は、そのデータがそのURLにGETリクエストを送信するだけで完了しない別の呼び出しで生成されるためです。 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です: enter image description here

だから、どのように我々はこれを再作成するのですか?シンプル! :

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

これはdictとしてJSON応答を返します。そこから、後でデータを見つけるまで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' 
+0

これは金です!私は一般的にウェブページを廃棄するのが初めてです。近い将来、同様の質問を避けるために私に向けて指摘できるリソースはありますか? –

+1

https://automatetheboringstuff.com/chapter11/をチェックしてください。本当に深いダイビングをしたい場合は、http://shop.oreilly.com/product/0636920034391.doをご検討ください。持っているのは素晴らしいスキルです。 – n1c9

関連する問題