正则表达式处理json格式数据前有以jQuery开头的一串字符导致解码报错

在爬取https://data.eastmoney.com/gzfx/detail/002594.html网站的JSON数据时,由于数据格式包含jQuery回调函数,导致解码失败。为了解决这个问题,文章提供了使用正则表达式去除jQuery开头和结尾括号的解决方案,从而成功解析JSON内容。
摘要由CSDN通过智能技术生成

场景:

做爬虫时,遇到json格式的数据,找到对应的url后,json格式化的开头有以jQuery开头的一串字符串和括号不是json格式,解码时报错

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

问题描述

例如:以该网站为例,https://data.eastmoney.com/gzfx/detail/002594.html,对json进行解码时如下:

import requests
import json

url = 'https://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery112305522640988534238_1680571452074&reportName=RPT_VALUEANALYSIS_DET&columns=ALL&quoteColumns=&pageNumber=1&pageSize=5000&sortColumns=TRADE_DATE&sortTypes=1&source=WEB&client=WEB&filter=(SECURITY_CODE=%22002594%22)&_=1680571452075'
headers={'referer':r'https://data.eastmoney.com/',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.62'}
rsp = requests.get(url=url,headers=headers)
rsp_json = json.loads(rsp.text)

但是遇到报错:

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

原因分析:

查看格式化json时发现多了下图框出来的一块内容,导致字典识别错误。
在这里插入图片描述


解决方案:

既然多了这一块内容使其构不成字典,那就将这一部分去掉,将字典部分拿出来解析,注意在最后面还有个括号和分号也要去掉:
在这里插入图片描述

提示:采用正则表达式

import requests
import json
import re

url = 'https://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery112305522640988534238_1680571452074&reportName=RPT_VALUEANALYSIS_DET&columns=ALL&quoteColumns=&pageNumber=1&pageSize=5000&sortColumns=TRADE_DATE&sortTypes=1&source=WEB&client=WEB&filter=(SECURITY_CODE=%22002594%22)&_=1680571452075'
headers={'referer':r'https://data.eastmoney.com/',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.62'}

rsp = requests.get(url=url,headers=headers)
rsp_sub = re.sub('^jQuery112305522640988534238_1680571452074\(', '', rsp.text)
rsp_sub_2 = re.sub('\);', '', rsp_sub)
rsp_json = json.loads(rsp_sub_2)
print(rsp_json)

最后成功获取:
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值