2014-02-22 65 views
2

我試圖下載使用Python網頁和訪問網頁的某些元素。我在下載頁面時遇到問題:內容是垃圾。這是頁面的第一行:蟒蛇的urllib2返回垃圾

‹í}évÛH²æïòSd±ÏmÉ·’¸–%ÕhµÕ%ÙjI¶«JããIÐ(‰îî{æ1æ÷¼Æ¼Í}’ù"à""’‚d÷t»N‰$–\"ãˈŒˆŒÜøqïíîùï'û¬¼­gôÁnžm–úq<ü¹R¹¾¾._›å ìUôv»]¹¡gJÌqÃÍ’‡%z‹[ÎÖ3†[(,jüËȽÚ,í~ÌýX;y‰Ùò×f)æ7q…JzÉì¾F<ÞÅ]­Uª 

這個問題只在以下網站上出現:http://kickass.to。他們有可能以某種方式保護他們的頁面嗎?這是我的Python代碼:

import urllib2 
import chardet 
url = 'http://kickass.to/' 
user_agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KH 
TML, like Gecko) Chrome/6.0.472.63 Safari/534.3' 
headers = { 'User-Agent' : user_agent } 
req = urllib2.Request(url, None, headers) 
response = urllib2.urlopen(req) 
page = response.read() 
f = open('page.html','w') 
f.write(page) 
f.close() 
print response.headers['content-type'] 
print chardet.detect(page) 

和結果:

text/html; charset=UTF-8 
{'confidence': 0.0, 'encoding': None} 

它看起來像一個編碼問題,但chardet的檢測 '無'。任何想法?

+0

你能訪問瀏覽器中的URL嗎?我不知道你,但我的ISP阻止該網站。也許這是與此有關的? –

+0

@AlexThornton:是的,我可以通過瀏覽器訪問它。 – user3341975

+0

哇,我對python 2很少有經驗,但爲了嘗試,也許嘗試'urllib'而不是'urllib2'? –

回答

4

此頁面中gzip編碼返回。

(可打印出response.headers['content-encoding']驗證這一點。)

最有可能的網站不尊重「的Accept-Encoding」字段中的要求,並建議該客戶端支持gzip(大多數現代瀏覽器一樣)。

urllib2不支持縮小,但您可以使用gzip模塊,如所述。在這個線程:Does python urllib2 automatically uncompress gzip data fetched from webpage?

+0

我已經打印出來了{'confidence':0.0,'encoding':None}。那是gzip嗎? – user3341975

+0

您已經打印了字符集檢測結果。我敢打賭,字符集檢測器不希望gzip。 是的,如果您從標題打印「內容編碼」,您將看到'gzip'。 – Inspired

+0

非常感謝它的工作。我雖然在發佈該問題之前已經正確地測試了gzip編碼。乾杯 – user3341975