想寫一個抓取免費代理並驗證是否可用得爬蟲,寫的過程當中發現一個問題,某些網站用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()