为什么从页面获取的文本有时像是乱码?
我在用Python的urllib和urllib2打开和读取网页,但有时候得到的文本是看不懂的。例如,如果我运行这个:
import urllib
text = urllib.urlopen('http://tagger.steve.museum/steve/object/141913').read()
print text
我得到了一些看不懂的文字。我看过这些帖子:
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