python3爬虫header中设置压缩的网页解码

爬虫的时候,有些网页需要设置header头,类似下面的一段:

'Accept-Encoding': 'gzip, deflate',

遇到这类的,我们设置了header头,那么拿到请求回来的数据时也要解一波,废话不多说了,拿一段代码说事吧(代码运行环境python3,需要的相关模块自己需安装):

from urllib.request import urlopen
from urllib.request import Request
from bs4 import BeautifulSoup
import io
import gzip

def unzip(data):
    data = io.BytesIO(data)
    gz = gzip.GzipFile(fileobj=data)
    data = gz.read()
    gz.close()
    return data

header={
	'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
	'Accept-Encoding': 'gzip, deflate',
	'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,fr;q=0.7,it;q=0.6,he;q=0.5,nl;q=0.4,ru;q=0.3',
   	'Cache-Control': 'max-age=0',
	'Connection': 'keep-alive',
	'Upgrade-Insecure-Requests': 1,
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
url='http://xxxxx/xxxx/xxxx.html'
request=Request(url=url,headers=header);
url_html=unzip(urlopen(request).read()).decode('gbk','ignore').encode('UTF-8');  #此处不一定这样写,需要看你爬取网页的本身编码
url_content = BeautifulSoup(url_html,'html.parser')
car = url_content.find("div",{"id":"JlistTb"}).findAll(class_="j-list")   #以下都是爬虫示例,需根据自身爬去的网页做更改
for i in (range(0,len(car))):
    print(car[i].findAll(class_="sname")[0].get_text())

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机