请教一下爬虫问题,有的 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 之类的都无法正确解析。
1
NotFoundEgg 306 天前 1
请求头里 Accept-Encoding 的 br 去掉试试
给出的信息太少了没法猜原因 |
2
nyxsonsleep OP @NotFoundEgg 🐂🐂🐂感谢大佬。
以前我好像也遇到过,但是没想起来哈,这个是压缩方式的原因吧?请教一下 br 是什么压缩方式,为什么 requests 默认不支持呀,还是说我的实现方式有问题。 |
3
NotFoundEgg 306 天前
@nyxsonsleep br 压缩体积更小,但要额外解析
|
4
NotFoundEgg 306 天前
@NotFoundEgg 我之前踩过这个坑,好像安个依赖就好了。但最简单粗暴的方法就是把 Accept-Encoding 里的 br 去掉
|
5
zsh2517 306 天前 2
@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 ,决定是否自动解压缩 |