【问题标题】:Web Scraping Yahoo Finance Statistics - Code Errors Out on Empty Fields网页抓取雅虎财务统计数据 - 空字段上的代码错误
【发布时间】: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


    【解决方案1】:

    对字典使用 get 方法,它允许您在未找到键的情况下提供默认值:

    key_stats['defaultKeyStatistics']['sharesShort'].get(‘longFmt’, ‘N/A’)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多