嗨,我正在为Yahoo Finance进行抓取工作,我正在使用JSON获取密钥,然后抓取密钥,例如...
fwd_div_yield = data['context']['dispatcher']['stores']['QuoteSummaryStore']["summaryDetail"]['dividendYield']['raw']
错误是,如果公司不支付股息,则会产生关键错误,因为没有关键的“原始”,而不是使用raw = 0,它们只是没有原始的。但是,如果公司确实有股息,它将返回“原始”,“ fmt”等。
我想知道最有效的处理方式是什么?
另一个问题是您将如何访问...
[{'raw': 1595894400, 'fmt': '2020-07-28'}, {'raw': 1596412800, 'fmt': '2020-08-03'}]
我目前的求助是...
earnings_dates = data['context']['dispatcher']['stores']['QuoteSummaryStore']['calendarEvents']['earnings']['earningsDate'][0]['fmt']
earnings_datee = data['context']['dispatcher']['stores']['QuoteSummaryStore']['calendarEvents']['earnings']['earningsDate'][1]['fmt']
earnings_date = earnings_dates+", "+earnings_datee
答案 0 :(得分:2)
要从raw
键中提取股息收益率,而在没有KeyError
时不得到收益,请执行以下操作:
fwd_div_yield = data['context']['dispatcher']['stores']['QuoteSummaryStore']["summaryDetail"]['dividendYield'].get('raw', 0)
如果raw
不存在,则fwd_div_yield
将为0。
然后从字典列表中检索每个日期,您可以使用列表理解:
earnings_dates = data['context']['dispatcher']['stores']['QuoteSummaryStore']['calendarEvents']['earnings']['earningsDate']
fmt_dates = [date['fmt'] for date in earnings_dates]
此外,该数据可通过以下网址获得:https://query2.finance.yahoo.com/v10/finance/quoteSummary/aapl?modules=summaryDetail。只需将aapl
替换为要抓取的符号即可。
答案 1 :(得分:0)
我会用任何代码包装要检查的公司是否在try/except
块中派发股息。
def paysDivivend(data):
try:
if 'raw' in data:
return True
except KeyError:
return False
没有看到任何示例代码,这是一种快速解决方案
第二个问题...
如果,您要创建[{'raw': 1234,'fmt':'2020-07-28'},...]
:
基于支付股息的公司汇总列表。 创建列表:
def dividendList(data):
dividend_list = []
for company in data:
dividend_list.append({'raw':compay['path']['to']['raw'],'fmt':company['path']['to'][fmt']})
return dividend_list
如果,则您在创建列表后尝试访问每个列表:
def accessDividend(dividend_data):
for dividend in dividend_data:
print(f"{dividend['raw']}, {dividend['fmt']}")