打印的html会返回乱码文本...而不是我希望在"中看到的内容"查看来源"在浏览器中。
为什么?如何轻松解决?
感谢您的帮助。
使用机械化,卷曲等的相同行为
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
答案 0 :(得分:3)
尝试请求。 Python Requests.
import requests
response = requests.get("http://www.ncert.nic.in/ncerts/textbook/textbook.htm")
print response.text
原因是该网站使用gzip编码。据我所知,urllib不支持缩减,因此您最终会对使用该编码的某些网站采用压缩的html响应。您可以通过打印响应中的内容标题来确认这一点。
print response.headers
在那里你会看到“Content-Encoding”是gzip格式。为了使用标准的urllib库来解决这个问题,你需要使用gzip模块。 Mechanize也这样做,因为它使用相同的urllib库。请求将处理此编码并为您很好地格式化。
答案 1 :(得分:3)
我使用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中执行此操作的解决方案: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(打印看看)