2

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

import urllib

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

我得到一些不可读的文本。我读过这些帖子:

来自 urlopen 的乱码

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

但似乎找不到我的答案。

预先感谢您的帮助!


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

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()

谢谢大家的回复。

4

2 回答 2

2

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

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

于 2011-11-25T16:09:12.680 回答
1

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

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
于 2011-11-25T16:59:12.680 回答