python urllib2.urlopen-html文本乱码-为什么?

python urllib2.urlopen-html文本乱码-为什么?,python,html,urllib2,mechanize-python,Python,Html,Urllib2,Mechanize Python,打印的html返回乱码文本。。。而不是我期望在浏览器的“查看源代码”中看到的内容 为什么呢?如何轻松修复它 谢谢你的帮助 使用mechanize、curl等的相同行为 import urllib import urllib2 start_url = "http://www.ncert.nic.in/ncerts/textbook/textbook.htm" response = urllib2.urlopen(start_url) html = response.read() print

打印的html返回乱码文本。。。而不是我期望在浏览器的“查看源代码”中看到的内容

为什么呢?如何轻松修复它

谢谢你的帮助

使用mechanize、curl等的相同行为

import urllib
import urllib2



start_url = "http://www.ncert.nic.in/ncerts/textbook/textbook.htm"
response = urllib2.urlopen(start_url)
html = response.read()
print html
尝试请求

这是因为该站点使用gzip编码。据我所知,urllib不支持泄气,因此对于使用该编码的某些站点,您最终会得到压缩的html响应。您可以通过打印响应中的内容标题来确认这一点,如下所示

print response.headers
在这里,您将看到“内容编码”是gzip格式。为了使用标准的urllib库解决这个问题,您需要使用gzip模块。Mechanize也这样做,因为它使用相同的urllib库。请求将处理此编码并为您很好地格式化。

尝试请求

这是因为该站点使用gzip编码。据我所知,urllib不支持泄气,因此对于使用该编码的某些站点,您最终会得到压缩的html响应。您可以通过打印响应中的内容标题来确认这一点,如下所示

print response.headers

在这里,您将看到“内容编码”是gzip格式。为了使用标准的urllib库解决这个问题,您需要使用gzip模块。Mechanize也这样做,因为它使用相同的urllib库。请求将处理这种编码并为您很好地格式化它。

我使用curl得到了相同的乱码文本

curl http://www.ncert.nic.in/ncerts/textbook/textbook.htm
结果似乎是gzip。因此,这为我显示了正确的HTML

curl http://www.ncert.nic.in/ncerts/textbook/textbook.htm | gunzip
以下是有关在Python中执行此操作的解决方案:

由OP编辑:

阅读上述内容后,修订后的答案是:

import urllib
import urllib2
import gzip
import StringIO

start_url = "http://www.ncert.nic.in/ncerts/textbook/textbook.htm"
response = urllib2.urlopen(start_url)
html = response.read()

data = StringIO.StringIO(html)
gzipper = gzip.GzipFile(fileobj=data)
html = gzipper.read()

html
现在保存html(打印出来查看)

我使用curl得到了相同的乱码文本

curl http://www.ncert.nic.in/ncerts/textbook/textbook.htm
结果似乎是gzip。因此,这为我显示了正确的HTML

curl http://www.ncert.nic.in/ncerts/textbook/textbook.htm | gunzip
以下是有关在Python中执行此操作的解决方案:

由OP编辑:

阅读上述内容后,修订后的答案是:

import urllib
import urllib2
import gzip
import StringIO

start_url = "http://www.ncert.nic.in/ncerts/textbook/textbook.htm"
response = urllib2.urlopen(start_url)
html = response.read()

data = StringIO.StringIO(html)
gzipper = gzip.GzipFile(fileobj=data)
html = gzipper.read()

html
现在保存html(打印出来查看)

我无法复制此内容。在你的上下文中,“乱码”是什么意思?我得到的html正是我所期望的。我无法复制它。在你的上下文中,“乱码”是什么意思?我得到的html正是我所期望的。也许在GZIPIN之前检查“Content Encoding:gzip”头是否存在。也许在GZIPIN之前检查“Content Encoding:gzip”头是否存在。嗨,我之前没有关于请求的信息。。。那么这比使用urllib2好吗。。我能否在将来完全使用请求来代替urllib2,并期望一切都能工作得更好。库是否比请求“更好”有待解释。我倾向于非常喜欢它,到目前为止使用它没有任何问题。它基于urllib2库,所以您的大多数操作也应该与该库一起使用。嗨,我以前没有提到请求。。。那么这比使用urllib2好吗。。我能否在将来完全使用请求来代替urllib2,并期望一切都能工作得更好。库是否比请求“更好”有待解释。我倾向于非常喜欢它,到目前为止使用它没有任何问题。它基于urllib2库,因此您的大多数操作也应该使用该库。