关于python:为什么从页面检索的文本有时看起来像乱码?

Why does text retrieved from pages sometimes look like gibberish?

我在Python中使用urllib和urllib2来打开和阅读网页但有时候,我得到的文字是不可读的。 例如,如果我运行这个:

1
2
3
4
import urllib

text = urllib.urlopen('http://tagger.steve.museum/steve/object/141913').read()
print text

我得到一些难以理解的文字。 我看过这些帖子:

从urlopen的胡言乱语

python urllib2会自动解压缩从网页获取的gzip数据吗?

但似乎无法找到我的答案。

预先感谢您的帮助!

更新:我通过"说服"服务器我的用户代理是浏览器而不是爬虫来解决问题。

1
2
3
4
5
6
7
import urllib

class NewOpener(urllib.FancyURLopener):
  version = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.120 Chrome/15.0.874.120 Safari/535.2'

nop = NewOpener()
html_text = nop.open('http://tagger.steve.museum/steve/object/141913').read()

谢谢大家的回复。


这个乱码是对'http://tagger.steve.museum/steve/object/141913'请求的真实服务器响应。 实际上,它看起来像混淆的JavaScript,如果由浏览器执行,则会加载页面内容。

要获得此内容,您需要执行此JavaScript,这在Python中可能是一项非常困难的任务。 如果您仍想这样做,请查看pywebkitgtk


您可以使用Selenium来获取内容。 下载服务器和客户端驱动程序,运行服务器并运行:

1
2
3
4
5
6
7
8
from selenium import selenium
s = selenium("localhost", 4444,"*chrome","http://tagger.steve.museum")
s.start()

s.open("/steve/object/141913")

text = s.get_html_source()
print text