【问题标题】:python urllib2 returns garbagepython urllib2 返回垃圾
【发布时间】:2014-02-22 23:17:45
【问题描述】:

我正在尝试使用 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 检测到“无”。有什么想法吗?

【问题讨论】:

  • 您可以在浏览器中访问网址吗?我不了解您,但我的 ISP 阻止了该站点。也许与此有关?
  • @AlexThornton:是的,我可以通过浏览器访问它。
  • 哇,我对 python 2 的经验很少,但也许为了尝试而尝试urllib而不是urllib2
  • 您可能会注意到 wget 获取相同的“垃圾”(实际上是正常的,但经过压缩的)内容。

标签: python urllib2


【解决方案1】:

此页面以gzip编码返回。

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

网站很可能不尊重请求中的“接受编码”字段,并建议客户端支持 gzip(大多数现代浏览器都支持)。

urllib2 不支持放气,但您可以使用 gzip 模块,如所述,例如在这个线程中:Does python urllib2 automatically uncompress gzip data fetched from webpage?

【讨论】:

  • 我已经打印出来并得到了 {'confidence': 0.0, 'encoding': None} 。那是gzip吗?
  • 您已经打印了字符集检测的结果。我敢打赌,字符集检测器不会期望 gzip。是的,如果您从标题中打印“内容编码”,您将看到“gzip”。
  • 非常感谢它的工作。我虽然在发布问题之前已经正确测试了 gzip 编码.. 干杯
猜你喜欢
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2014-12-04
  • 2015-06-27
  • 2016-07-12
相关资源
最近更新 更多