爬虫报错:json.decoder.JSONDecodeError: Extra data: line 1 column 9 (char 8)

这个问题绝了,害我凌晨冒着生命危险一直在百度。

在爬虫的时候,因为需要获取的内容是存放在JS里的,需要用json.loads将requests获取到的文本转化为python字典,这个文件preview下是酱紫滴。红框勾住的部分是javascript函数部分,不能包含在json内

爬虫报错:json.decoder.JSONDecodeError: Extra data: line 1 column 9 (char 8)_第1张图片

出错代码是这样的:

可以看出来,我原本的思路是获取到网页的文本之后,将json文件外围的javascript的函数

try{feedCardJsonpCallback( 

);}catch(e){};

去掉。之后再loads

import requests
import json
uuu=requests.get('https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=3&encode=utf-8&callback=feedCardJsonpCallback&_=1586091436395')
u1=json.loads(uuu.text.lstrip('try{feedCardJsonpCallback(').rstrip(');}catch(e){};'))
print(u1)

但是执行之后报错

Traceback (most recent call last):
  File "D:/Shiyanlou_test/pachong.py", line 94, in 
    u1=json.loads(uuu.text.lstrip('try{feedCardJsonpCallback(').rstrip(');}catch(e){};'))
  File "E:\Anaconda3\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "E:\Anaconda3\lib\json\decoder.py", line 340, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 9 (char 8)

这之后就开始了漫漫百度路。很多经验贴都在说是json的格式有问题,但我想我爬的是人家网页上的东西,怎么会格式有问题呢,,哈哈,还是我太天真。。

找到了一个解决方法,那就是利用demjson

demjson可以解决不正常的json格式数据

demjson有两个常用的方法,一个是encode,一个是decode

encode的作用是:将python对象编码成json字符串

decode的作用是:将已编码的json字符串解码为python对象

在这个问题上用的是encode方法,下面这个就是可以成功执行的代码。因为是要把python对象编码成json字符串,所以首先得把不是json字符串的东西给去掉,这就是

uu1=uuu.text.lstrip('try{feedCardJsonpCallback(').rstrip(');}catch(e){};')

存在的意义。之后再用encode将uu1编码成json字符串,就可以成功loads了

import requests
import json
import demjson

uuu=requests.get('https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=3&encode=utf-8&callback=feedCardJsonpCallback&_=1586091436395')
uu1=uuu.text.lstrip('try{feedCardJsonpCallback(').rstrip(');}catch(e){};')
uu2=demjson.encode(uu1)
u1=json.loads(uu2)
print(u1)

感觉心脏有点隐隐作痛,我要赶快休息了

你可能感兴趣的:(Python爬虫)