requests 请求网页乱码
一般情况下,每个网页有自己的编码,在使用 requests 请求对应网页时,如果遇到中文编码的问题,大多数情况下直接显式指定 encoding 就可以了,但是今天遇到一个网站,还真是怎么指定都不行:https://www.medchemexpress.cn/
以下所列的参考文档可能能解决编码问题,所以记录下来,但是对于上面这个网站来说并没有完全解决问题:
- https://blog.csdn.net/weixin_48368715/article/details/124645013
- https://blog.csdn.net/Tity_zhao/article/details/53486913
经过一系列测试,终于是解决了这个问题,并同时抽象出了一种针对编码问题比较简单的通用处理方式,特意记录下:
-
利用 apparent_encoding 自动识别网页编码
相比与显式的指定编码,requests 提供了自动识别网页编码的方式,更加简洁方便,使用时只需要将原来 response.encoding = 'utf-8' 这种模式修改为以下的方式即可:
import requests response = requests.get(url, headers) response.encoding = response.apparent_encoding
-
保存网页数据时也同时使用这种方式识别出的编码自动配置编码
with open('prod.html', 'w', encoding=response.apparent_encoding) as f: f.write(response.text)
本文来自博客园,作者:sinatJ,转载请注明原文链接:https://www.cnblogs.com/zishu/p/17508274.html