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 是否过期等。
发现也不是携带参数原因。
3. 之后经过一系列 res.text
res.content
json.dumps()
json.loads()
调试,发现返回的始终是各种格式的乱码。
4. 最后发现是 header 中多了一行 "accept-encoding": "gzip, deflate, br"
。
该代码表明浏览器接受服务器返回压缩后的数据,由于浏览器对于从服务器中返回的 gzip 压缩后的网页数据,会自动解压缩,但爬虫模拟向服务器发送请求,携带了此 header 信息,而不具备解压缩的能力,所以返回的数据会乱码。此行代码删掉或注释即可。文章来源:https://www.toymoban.com/news/detail-614446.html
文章来源地址https://www.toymoban.com/news/detail-614446.html
到了这里,关于爬虫 res.json() 报错 requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!