鱼C论坛

 找回密码
 立即注册
查看: 1257|回复: 10

json.decoder.JSONDecodeError

[复制链接]
发表于 2020-5-7 18:54:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 九千 于 2020-5-7 21:09 编辑

代码全部来自:=https://www.makcyun.top/2018/10/12/web_scraping_withpython6.html]
import requests
import re
import json
import csv

#定义一个get_table()方法来输出抓取的第一页表格内容
def get_table():
    
    params = {      #params为url请求中所包含的参数
        'type':'CWBB_LRB20',#表格类型,LRB为利润表缩写,必须
        'token':'70f12f2f4f091e459a279469fe49eca5',#访问令牌,必须
        'st':'noticedate',
        'sr':-1,
        'p':1,
        'ps':50,
        'js':'var YlIfdEKv={pages:(tp),data: (x),font:(font)}',
        'filter':"(securitytypecode='058001001')(reportdate=^2018-06-30^)"#筛选条件
        #'rt':52961251  可以不用
        }
    #params参数设置好之后,将url和params参数一起传进requests.get()方法中,这样就构造好了请求连接

    url='http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?type=CWBB_LRB20&token=70f12f2f4f091e459a279469fe49eca5&st=noticedate&sr=-1&p=2&ps=50&js=var%20svbCesOb={pages:(tp),data:%20(x),font:(font)}&filter=(securitytypecode=%27058001001%27)(reportdate=^2018-06-30^)&rt=52961271'
#仅使用http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?搜索出来的页面只显示hello world ,用了这么长的才能搜索出来显示的是数据

    response = requests.get(url,params=params).text
    #print(response)
#get_table()


#正则表达式提取表格
#确定页数

    page_all = re.search(r'var.*?{pages:(\d+),data:.*?',response) #用\d+匹配页数中的数值
    #page_all=re.search(pat,response) #用re.search()方法提取出前面匹配的数值
    #print(type(page_all))
    print(page_all.group(1)) #group(1)表示输出第一个结果,这里就是()中的页数
    
#提取出list,可以用json.dumps和json.loads
    #pattern = re.compile(r'var.*?data:(.*)}',re.S)
    
    items = re.search(r'var.*?data:(.*)}',response) #re.search()返回的结果是字符串类型
    data=items.group(1)
    #print(type(data)) #注释掉的是用于检测类型
    
    #print(type(list(data)))
    data=data[0]
    #print(type(data))
    #print(data[0])

    for d in data:
        with open('eastmoney.csv','a',encoding='utf-8',newline='') as f:
            w = csv.writer(f)
            w.writerow(d.values)
    


    try:
        data=json.loads(data)
    except json.decoder.JSONDecodeError as reason:  
        print('九千岁',reason)
    print(type(data))
    print(data[0])

    for d in data:
        with open('eastmoney.csv','a',encoding='utf-8',newline='') as f:
            w = csv.writer(f)
            w.writerow(d.values)


get_table()
我是想要将请求网页得到的Response,利用正则解析后获得的一段str数据,转换为list,这样方便后面写入表格,
但在使用json.loads()方法转换时出现异常,想请问一下这是为什么,应该怎么解决?从网页解析出来的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 18:56:35 | 显示全部楼层
估计是res.text中有无法被json解析的数据吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-7 19:01:02 | 显示全部楼层
qiuyouzhi 发表于 2020-5-7 18:56
估计是res.text中有无法被json解析的数据吧

我看网上有些说是因为数据太庞大,不知道该怎么解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-7 19:18:16 From FishC Mobile | 显示全部楼层
九千 发表于 2020-5-7 19:01
我看网上有些说是因为数据太庞大,不知道该怎么解决

网站网址?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-7 19:43:12 | 显示全部楼层
1. 出现这种错误的原因可能是数据无法解析。

2. 最好发全你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-7 21:11:03 | 显示全部楼层

有表格数据的链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-7 21:11:45 | 显示全部楼层
zltzlt 发表于 2020-5-7 19:43
1. 出现这种错误的原因可能是数据无法解析。

2. 最好发全你的代码

好的,已经发全,有时间的话麻烦您帮忙看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 09:06:35 | 显示全部楼层
本帖最后由 wp231957 于 2020-5-8 09:07 编辑
九千 发表于 2020-5-7 21:11
好的,已经发全,有时间的话麻烦您帮忙看一下


首先,get回来的数据 不是标准json  需要自己处理一下
其次,你这个数据 是不是加密了呀   类似
".",.","operateexp":".","operateexp_tb":"-.","saleexp":".","manageexp":".","financeexp":"-.",.".","-."
这些东西,浏览器都不认识,无法解析,正常这些浏览器可以直接解析的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 17:46:42 | 显示全部楼层
wp231957 发表于 2020-5-8 09:06
首先,get回来的数据 不是标准json  需要自己处理一下
其次,你这个数据 是不是加密了呀   类似
"&#x ...

嗯嗯,是的,是加密了,不好意思之前有事,现在才有时间,回复晚了

那这是加密导致的无法解析对吗,还是也有json格式问题
E://Desktop:CP%LLDK7EU5AQ3%5DU)F{WRI1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 17:47:38 | 显示全部楼层
九千 发表于 2020-5-11 17:46
嗯嗯,是的,是加密了,不好意思之前有事,现在才有时间,回复晚了

那这是加密导致的无法解析对吗,还 ...

E:\Desktop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 17:57:27 | 显示全部楼层
wp231957 发表于 2020-5-8 09:06
首先,get回来的数据 不是标准json  需要自己处理一下
其次,你这个数据 是不是加密了呀   类似
"&#x ...

他是这样的,有部分看起来像正常的,像第一行,就是正常的,然后后面又是加密了的[{"scode":"603029","hycode":"016043","companycode":"80318061","sname":"天鹅股份","publishname":"机械行业","reporttimetypecode":"002","combinetypecode":"001","dataajusttype":"2","mkt":"shzb","noticedate":"2019-10-12T00:00:00","reportdate":"2018-06-30T00:00:00","eutime":"2020/1/8 11:57:39","securitytypecode":"058001001","trademarketcode":"069001001001","parentnetprofit":"-.","totaloperatereve":".","totaloperateexp":".","totaloperateexp_tb":"-.","operateexp":".","operateexp_tb":"-.","saleexp":"&
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 06:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表