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

2024-05-23 17:45:30 发布

您现在位置: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

Tags: 文本importurl内容源代码responsehtml浏览器
2条回答

尝试请求。Python Requests.

import requests
response = requests.get("http://www.ncert.nic.in/ncerts/textbook/textbook.htm")
print response.text

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

^{pr2}$

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

我用curl得到了同样的乱码

curl http://www.ncert.nic.in/ncerts/textbook/textbook.htm

结果似乎被压缩了。所以这为我显示了正确的HTML。在

^{pr2}$

下面是用Python实现这一点的解决方案:Convert gzipped data fetched by urllib2 to HTML

编辑: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(打印出来看看)

相关问题 更多 >