想写一个抓取免费代理并验证是否可用得爬虫,写的过程当中发现一个问题,某些网站用urll2请求返回乱码,而且把返回数据给beautifulsoup解析不出数据,若是是编码问题致使的乱码确定不会影响beautifulsoup的解析,因此确定是其余缘由,通过各类百度,谷歌,找到的问题的缘由。python
一些网站无论你的请求头带不带网站
Accept-Encoding:gzip
他都会返回通过gzip压缩后的内容,即返回头部带有编码
Content-Encoding:gzip
这就是beautifulsoup没法解析的缘由。既然知道的缘由,那就好办了,将gzip解压便可。
url
import urllib2 import gzip import StringIO def ungzip(buf): content = buf.read() content = StringIO.StringIO(content) #将content做为“内存文件”操做 buf = gzip.GzipFile(fileobj=content) return buf buf = urllib2.urlopen('http://www.kuaidaili.com/free/inha/') if buf.headers.get('Content-Encoding') == 'gzip': buf = ungzip(buf) print buf.read()