【问题标题】:Why I got messy characters while opening url using urllib2?为什么使用 urllib2 打开 url 时出现乱码?
【发布时间】:2011-11-06 01:45:36
【问题描述】:

这是我的代码,你们也可以测试一下。我总是得到混乱的字符而不是页面源。

Header = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 (.NET CLR 3.5.30729)"}

Req = urllib2.Request("http://rlslog.net", None, Header)

Response = urllib2.urlopen(Req)

Html = Response.read()

print Html[:1000]

通常Html 应该是页面源,但它最终是大量混乱的字符。有人知道为什么吗?

顺便说一句:我在 python 2.7 上

【问题讨论】:

  • 对我来说很好,问题一定出在其他地方。也许你输出响应的方式有一些简单的错误?
  • @kapep:你确定吗?我只是简单地“打印 Html[:100]”,它们都搞砸了。你用的是什么python版本?
  • 这只是一个疯狂的猜测,因为打印部分不包括在内。按预期工作。使用 2.6.4。
  • @kapep:现在突然出现,一切正常!相同的代码,没有任何改变。哦,伙计,我很困惑......
  • @Shane: "什么都没有改变":在你这边没有,但可能在服务器端发生了一些变化。

标签: python urllib2 urllib


【解决方案1】:

正如布鲁斯已经建议的那样,压缩似乎是一个问题。服务器返回 gzip 压缩内容,但urllib2 不支持自动 gzip 压缩。事实上,据我所知,服务器在这种情况下行为不端:它应该只在存在 Accept-encoding: gzip 标头时压缩内容(您可以自己提供,或者如果它支持它则由您的客户端自动添加)。

所以:要么使用自动支持它的库,比如httplib2(我已经用相关页面测试过,它可以工作),要么自己解压(参见this SO question 的答案了解如何操作它,请注意,在问题中检查服务器返回的标头以查看内容是否经过 gzip 压缩)

【讨论】:

    【解决方案2】:

    您使用支持动态压缩的用户代理提出请求。你确定输出不是 gzip 压缩的吗?尝试通过zlib module 运行它和/或打印标题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2011-12-30
      • 2015-04-29
      • 1970-01-01
      • 2018-05-04
      相关资源
      最近更新 更多