【发布时间】:2020-06-28 05:52:03
【问题描述】:
我发现了这个有用的代码 sn-p: Web scraping of Yahoo Finance statistics using BS4
我已经按照下面的块简化了代码:
import requests, re, json, pprint
p = re.compile(r'root\.App\.main = (.*);')
# tickers = ['NKE']
tickers = ['AGL.AX']
results = {}
with requests.Session() as s:
for ticker in tickers:
r = s.get('https://finance.yahoo.com/quote/{}/key-statistics?p={}'.format(ticker,ticker))
data = json.loads(p.findall(r.text)[0])
#print(data)
key_stats = data['context']['dispatcher']['stores']['QuoteSummaryStore']
print(key_stats)
res = {
'Enterprise Value' : key_stats['defaultKeyStatistics']['enterpriseValue']['fmt']
,'Shares_Short' : key_stats['defaultKeyStatistics']['sharesShort']['longFmt']
}
results[ticker] = res
pprint.pprint(results)
如果输出有有效数据(例如,企业值),key_stats 字典将包含如下数据,代码将毫无问题地吐出输出。
'enterpriseValue': {'raw': 13684141056, 'fmt': '13.68B', 'longFmt': '13,684,141,056'},
但是,有些元素基本上是空的。例如,澳大利亚证券交易所不发布空头股票数据。所以 key_stats 字典中的条目是这样的。
'sharesShort':{},
每当代码遇到与上述类似的情况时,它都会出错并显示类似以下的消息:
Traceback (most recent call last):
File "Scan_Yahoo_Stats_Page.py", line 35, in <module>
,'Shares_Short' : key_stats['defaultKeyStatistics']['sharesShort']['longFmt'
]
KeyError: 'longFmt'
每当发生这种情况时,我希望代码将此数据的值设为“N/A”。有没有办法做到这一点?
提前致谢。
【问题讨论】:
标签: python json dictionary web-scraping