【问题标题】:Checking network responses from a URL for a JSON using python使用python检查来自JSON的URL的网络响应
【发布时间】:2021-07-27 06:53:44
【问题描述】:

我需要从这个 URL hkex.com.hk 获取包含信息的 JSON,我可以使用 firefox>developer tools>network 并寻找我想要的 JSON,我需要使用 python 做同样的事情,所以远我有这个

url='https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en'
r = requests.get(url)
print(r.text)

但我只收到一个 HTML,所以即使在使用 .json() 之后,我也会收到错误“期望值”,因为它是空的,我该如何实现呢?

【问题讨论】:

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


【解决方案1】:

响应请求是一个 html 文本,因此您不能对整个响应使用 json() 方法。 应该有另一种方法可以将html“转换”为json,但是您必须找到要转换为的html部分。

【讨论】:

  • HTML 都不是我的 JSON 的一部分,HTML 只是网站的 HTML,JSON 作为单独的文件 .JSON 接收,我可以在 firefox>network>others 中找到它,但是我不知道如何使用 python 访问它
【解决方案2】:

json 确实隐藏在您在其中一个 cmets 中提到的 url 中。您必须获取 html,提取 json 并加载它:

url = 'https://www1.hkex.com.hk/hkexwidget/data/getequityfilter?lang=eng&token=evLtsLsBNAUVTPxtGqVeG8QpVRBPNt2I8CbDELLpyZv%2bff8QFzdfZ6w1Za4TWSJ6&sort=5&order=0&qid=1627367921383&callback=jQuery35106295196366220494_1627367912871&_=1627367912873'
req = requests.get(url)
#now for the extraction:
target = req.text.split('jQuery35106295196366220494_1627367912871(')[1].split(')')[0]
#EDIT
target = req.text.split('(')[1].split(')')[0]
data = json.loads(target)
data

输出应该是你的 json。

【讨论】:

  • 问题是带有 jQ​​uery351 ..... 的 URL 每天都在变化,所以我不能使用相同的,要使用 .JSON 获取更新的 URL,我需要加载这个“ hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en" 并使用 firefox 的开发人员工具找到新的 .JSON 的新链接,这部分是我希望使用 python 自动化的部分
  • @FddeF 对不起;你没有在问题中提到它,所以我不知道。一种可能的解决方法是将引用删除到 JQ.. 字符串并在( 上拆分,如.split('(')。它通常应该可以工作。
  • 抱歉,您似乎对这个话题很熟悉,您能否详细说明一下我们要对 JQ 做什么...使用.split('(')
猜你喜欢
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 2012-10-19
  • 2021-11-19
  • 1970-01-01
  • 2020-09-21
相关资源
最近更新 更多