如何确定一个python爬取得网页是否是被压缩的?

我今天尝试爬去糗事百科的。F12后发现REquest headers中Accept-Encoding:gzip, deflate, sdch 我就以为是被压缩的,后来

response=urllib.request.urlopen(Request
print(response.info().get('Content-Encoding'))

返回的是None,请问到底如何确定否被压缩

阅读 8.4k
1 个回答

你需要在抓取时设置 Accept-Encoding 这个头才会被压缩。

在浏览器中 Accept-Encoding:gzip, deflate, sdch 在告诉网站浏览器支持 gzipdeflatesdch 这三种压缩方式。也就是说这不代表网站支持的压缩方式,而是代表浏览器支持的压缩方式。

网站会选择其中一种支持的压缩方式返回,压缩方式为 Content-Encoding 的值。浏览器会根据这个值来选择对应的解压方式。

糗百支持 gzip,但是如果不设置 Accept-Encoding 则不会进行压缩。

python3#!/usr/bin/env python3
from urllib import request

USER_AGENT = r'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36'

req = request.Request(r'http://www.qiushibaike.com/', headers={'User-Agent': USER_AGENT, 'Accept-Encoding': 'gzip'})
res = request.urlopen(req)

print(res.info().get('Content-Encoding'))

上面的脚本输出为

gzip
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题