我今天尝试爬去糗事百科的。F12后发现REquest headers中Accept-Encoding:gzip, deflate, sdch 我就以为是被压缩的,后来
response=urllib.request.urlopen(Request print(response.info().get('Content-Encoding'))
返回的是None,请问到底如何确定否被压缩
人生最曼妙的风景,竟是内心的淡定与从容!
你需要在抓取時設定 Accept-Encoding 這個頭才會被壓縮。
Accept-Encoding
在瀏覽器中 Accept-Encoding:gzip, deflate, sdch 在告訴網站瀏覽器支援 gzip, deflate, sdch 這三種壓縮方式。也就是說這不代表網站支援的壓縮方式,而是代表瀏覽器支援的壓縮方式。
Accept-Encoding:gzip, deflate, sdch
gzip
deflate
sdch
網站會選擇其中一種支援的壓縮方式返回,壓縮方式為 Content-Encoding 的值。瀏覽器會根據這個值來選擇對應的解壓縮方式。
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'))
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'))
上面的腳本輸出為
你需要在抓取時設定
Accept-Encoding
這個頭才會被壓縮。在瀏覽器中
Accept-Encoding:gzip, deflate, sdch
在告訴網站瀏覽器支援gzip
,deflate
,sdch
這三種壓縮方式。也就是說這不代表網站支援的壓縮方式,而是代表瀏覽器支援的壓縮方式。網站會選擇其中一種支援的壓縮方式返回,壓縮方式為
Content-Encoding
的值。瀏覽器會根據這個值來選擇對應的解壓縮方式。糗百支援
gzip
,但是如果不設定Accept-Encoding
則不會進行壓縮。上面的腳本輸出為