当在headers中加了一个Accept-encoding:......时,返回的页面可能是经过了压缩的;即使没有加这个属性,返回的网页也可能是经过了压缩的(服务器自动压缩的)
我在爬取笔趣阁的某个网页时就遇到了被gzip压缩了的网页
1 #-*-coding:utf-8 -*-
2
3 import time
4 import re
5 import gzip
6 import urllib.request
7 from bs4 import BeautifulSoup
8 from io import StringIO
9 # import StringIO
10
11 url = "http://www.shuquge.com/txt/5760/index.html"
12 header = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36", "Accept-Encoding":""}
13 page = urllib.request.Request(url, headers = header)
14 gs = urllib.request.urlopen(page)
15 # gs = StringIO(gs)
16 # print(gs)
17
18 page_info = gzip.GzipFile(fileobj=gs)
19
20 page_info = page_info.read()
21 page_info = page_info.decode('utf-8')
22 print(page_info)
里面用了gzip模块,因为一开始看别人的博客以为要用到StringIO结果并不需要。
里面用到了gzip.GzipFile()方法,以及gzip对象的read()方法。