2011-11-25 42 views
2

我在Python中使用urllib和urllib2来打开和阅读网页,但有时,我得到的文本是不可读的。例如,如果我运行此:为什么从页面检索的文本有时看起来像是乱码?

import urllib 

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

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

Gibberish from urlopen

Does python urllib2 automatically uncompress gzip data fetched from webpage?

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

非常感谢您的帮助!


UPDATE:我通过固定“可信”服务器的问题,我的用户代理是一个布劳尔而不是爬行。

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

谢谢大家的回复。

+0

urlopen(youUrl)的结果是Javascript。这个脚本真的是你想要得到的内容,还是想获得网页的实际内容(显示浏览器的内容)? –

回答

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 
+0

谢谢joshz!事实证明,我将需要硒,因为我需要执行JavaScript之前,我可以查看页面源的方式,你可以在浏览器中看到它。一个简单的问题:如果我在交互式Python解释器上运行上面的脚本,它会很好。但是,如果我将它存储在一个文件中并一起运行,它会发现语法错误!你有什么想法可能会造成这种情况? – Thea

+0

不是真的不知道它是什么错误,我使用Python 2.7.2从一个文件运行它。我最好的猜测是从文件中运行不同的Python版本。 –

+0

它神奇地固定本身!我不知道是什么导致了这个问题!感谢您的建议! – Thea

2

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

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

相关问题