为什么从页面获取的文本有时像是乱码?

2 投票
2 回答
1197 浏览
提问于 2025-04-17 07:03

我在用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()

感谢大家的回复。

2 个回答

2

这段看起来像胡言乱语的内容其实是对请求 'http://tagger.steve.museum/steve/object/141913' 的真实服务器响应。实际上,它看起来像是经过混淆的JavaScript,如果在浏览器中执行,就会加载页面内容。

要获取这些内容,你需要执行这段JavaScript,而在Python中做到这一点可能会非常困难。如果你还是想尝试,可以看看 pywebkitgtk

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

撰写回答