2014-02-22 59 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