请教一下爬虫问题,有的 response 为什么不能在 Python 上解析?

307 天前
 nyxsonsleep

请教一下爬虫问题,有的 response 为什么不能在 python 上解析?

同样的请求在网页的 network 里面可以解析,在 fiddler 里面也能解析。

fiddler 获取截取到了 python 的 response ,可以正常解析,

response = requests.get(url, headers=headers, proxies=proxies, verify=False)
response.encoding = 'utf-8'
print(response.text) #乱码
print(response.content.decode('utf-8')) #乱码

试了 utf8 、gbk 、gb180xx 、gb23xx 、ISO-xxx 之类的都无法正确解析。

1182 次点击
所在节点    问与答
5 条回复
NotFoundEgg
307 天前
请求头里 Accept-Encoding 的 br 去掉试试
给出的信息太少了没法猜原因
nyxsonsleep
307 天前
@NotFoundEgg 🐂🐂🐂感谢大佬。
以前我好像也遇到过,但是没想起来哈,这个是压缩方式的原因吧?请教一下 br 是什么压缩方式,为什么 requests 默认不支持呀,还是说我的实现方式有问题。
NotFoundEgg
307 天前
@nyxsonsleep br 压缩体积更小,但要额外解析
NotFoundEgg
307 天前
@NotFoundEgg 我之前踩过这个坑,好像安个依赖就好了。但最简单粗暴的方法就是把 Accept-Encoding 里的 br 去掉
zsh2517
306 天前
@nyxsonsleep @NotFoundEgg 关键词 brotli ,HTTP 传输的时候可选的一种方式(以前是 gzip ,现在在往 br 过渡,br 压缩后的体积要比 gzip 小一些)。

搜了一下,requests 库有一个相关的 issue: https://github.com/psf/requests/issues/4525 ,大概要点是

1. python requests 库支持 br 依赖于 urllib3
2. 根据时间,两三年前已经支持了
3. “#5783 proposes a patch to request and decode in brotli, transparently by Requests, whenever the package brotli or brotlicffi are installed.”,似乎安装了 brotli 或者 brotlicffi 之后,才会自动解码

综上,结合 #4 提到的“好像安个依赖”,应该是 python 没有内置 br 相关算法,然后 requests 依赖的 urllib3 会根据当前环境是否额外装了 brotli ,决定是否自动解压缩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1018332

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX