python urllib2返回垃圾

时间:2014-02-22 23:17:46

标签: python urllib2

我正在尝试使用python下载网页并访问页面上的一些元素。我下载页面时遇到问题:内容是垃圾。这是页面的第一行:

‹í}é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检测到“无”..有任何想法吗?

1 个答案:

答案 0 :(得分:5)

此页面以gzip编码方式返回。

(尝试打印response.headers['content-encoding']以验证这一点。)

网站最有可能不遵守请求中的“Accept-Encoding”字段,并建议客户端支持gzip(大多数现代浏览器都支持)。

urllib2不支持缩减,但您可以使用gzip模块,例如在这个帖子中:Does python urllib2 automatically uncompress gzip data fetched from webpage?