res.json() 报错排除常见原因的其他可能原因分析

爬虫用 json() 接收网页数据返回结果时,报错 JSONDecodeError: Expecting value: line 1 column 1 (char 0)

res = requests.post(post_url, headers=self.headers, json=data)
res.encoding = 'utf-8'
print(res.json())

报错信息

1. 首先排除网页数据响应类型不是 json 格式的原因。可在开发者工具【网络】- 【响应头】中查看响应类型。

在这里插入图片描述

显然此处报错不是 JSON 格式的问题。

2. 则看请求头是否携带 cookie, refer, cookie 是否过期等。

cookie及refer正常

发现也不是携带参数原因。

3. 之后经过一系列 res.text res.content json.dumps() json.loads() 调试,发现返回的始终是各种格式的乱码。
4. 最后发现是 header 中多了一行 "accept-encoding": "gzip, deflate, br"

该代码表明浏览器接受服务器返回压缩后的数据,由于浏览器对于从服务器中返回的 gzip 压缩后的网页数据,会自动解压缩,但爬虫模拟向服务器发送请求,携带了此 header 信息,而不具备解压缩的能力,所以返回的数据会乱码。此行代码删掉或注释即可。

"accept-encoding": "gzip, deflate, br"

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐