【问题标题】:Unable to parse fields available within page source from a webpage无法从网页解析页面源中可用的字段
【发布时间】:2019-10-08 15:48:20
【问题描述】:

我在 python 中创建了一个脚本来解析网页中的两个字段。我感兴趣的字段是 javascript 加密的。但是,它们在 json 数组中的页面源中可用。以下脚本可以从该页面生成该 json 数组,但我无法从中挖掘出所需的字段。

导航到该页面后,您只需单击此标签Quarterly 即可查看其在此处显示的字段:

Webpage link

到目前为止我已经尝试过:

import re
import json
import requests

url = 'link has been given above'

res = requests.get(url)
data = re.findall(r'root.App.main[^{]+(.*);',res.text)[0]
jsoncontent = json.loads(data)
print(jsoncontent)

PS 我已经知道如何使用 selenium 获取它们,所以浏览器模拟器不是我想要遵守的选项。

【问题讨论】:

  • 我正在努力解决这个问题。您当前的脚本没有返回有效的 json,但页面上的 json 是有效的。您可以使用jsonviewer.stack.hu 之类的工具来遍历树并找出您的数据可能在哪里。
  • 在我的情况下,脚本确实返回了有效的 json 响应。奇怪!!
  • 啊,这是引号的问题,以及 jsonlint 喜欢如何处理它。无论如何,在下面回答,jsonview.stack.hu是必要的。

标签: python json python-3.x web-scraping python-requests


【解决方案1】:

季度数据在字典中很深,但你可以这样获取:

jsoncontent['context']['dispatcher']['stores']['QuoteSummaryStore']['earnings']['financialsChart']['quarterly']

返回: [{'date': '3Q2018', 'revenue': {'raw': 62900000000, 'fmt': '62.9B', 'longFmt': '62,900,000,000'}, 'earnings': {'raw': 14125000000, 'fmt': '14.12B', 'longFmt': '14,125,000,000'}}, {'date': '4Q2018', 'revenue': {'raw': 84310000000, 'fmt': '84.31B', 'longFmt': '84,310,000,000'}, 'earnings': {'raw': 19965000000, 'fmt': '19.96B', 'longFmt': '19,965,000,000'}}, {'date': '1Q2019', 'revenue': {'raw': 58015000000, 'fmt': '58.02B', 'longFmt': '58,015,000,000'}, 'earnings': {'raw': 11561000000, 'fmt': '11.56B', 'longFmt': '11,561,000,000'}}, {'date': '2Q2019', 'revenue': {'raw': 53809000000, 'fmt': '53.81B', 'longFmt': '53,809,000,000'}, 'earnings': {'raw': 10044000000, 'fmt': '10.04B', 'longFmt': '10,044,000,000'}}]

然后要进入您的季度,您可以循环访问:

quarter = jsoncontent['context']['dispatcher']['stores']['QuoteSummaryStore']['earnings']['financialsChart']['quarterly']
for q in quarter:
    print(q)  # print all quarters
    if q['data'] == "1Q2019":
        print(q)  # print the quarter you want

【讨论】:

  • 它会抛出这个错误quarter = jsoncontent['context']['dispatcher']['stores']['earnings']['financialsChart']['quarterly'] KeyError: 'earnings'
  • 您在粘贴的内容中缺少QuoteSummaryStore
  • 这里一样print(jsoncontent['context']['dispatcher']['stores']['QuoteSummaryStore']['earnings']['financialsChart']['quarterly']) KeyError: 'earnings'
  • 它仍然在我这边工作 - 也许重新运行您的初始脚本以重置 jsoncontent?另外,打印出jsoncontent['context']['dispatcher']['stores']['QuoteSummaryStore'] 看看里面包含什么? (jsonviewer.stack.hu 可能更简单)
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 2012-08-20
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多