關於urllib2返回網頁亂碼,beautifulsoup沒法解析問題

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