异常描述
1. 在浏览器上查看源代码发现是正常的
2. 爬虫打印res.txt发现内容是乱码
3. 设置了res.encoding的字符集也没有,还是乱码
可能原因
1. 这种情况下可能是字体加密,但是如果在浏览器中检索文本正常,那就不是字体加密
2. 服务器端对文本进行了压缩,导致打印res.txt是乱码
文本压缩检查和修复
1. 响应头的Content-Encoding字段
这个基本上没啥用,因为我看其他没有被压缩的页面也存在这个字段,一般值是gzip,当然也可能是其他,用这个确定是否被压缩是没啥太大意义的,但是这个可以作为解压测试的一个方案
2. 尝试gzip解压,gzip是由Content-Encoding来决定的
response = requests.get(url, headers)
with gzip.GzipFile(fileobj=io.BytesIO(response.content)) as gz:
html_content = gz.read().decode('xxxx')
print(html_content)
3. 也可以在请求头中加入 "Accept-Encoding": "",要求服务器端传递不要进行压缩
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Accept-Encoding": "",
}
url = "xxxxx"
response = requests.get(url, headers=headers)
print(response.text)