【问题标题】:Why does text retrieved from pages sometimes look like gibberish?为什么从页面中检索到的文本有时看起来像乱码?
【发布时间】:2012-01-06 11:22:56
【问题描述】:

我在 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?

但似乎找不到我的答案。

提前感谢您的帮助!


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

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

谢谢大家的回复。

【问题讨论】:

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

标签: python urllib2 urllib urlopen


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用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
    

    【讨论】:

    • 谢谢乔什!事实证明,我需要 Selenium,因为我需要先执行 javascript,然后才能以您在浏览器中看到的方式查看页面源代码。一个简单的问题:如果我在交互式 python 解释器上运行上面的脚本,它会很好用。但是如果我将它存储在一个文件中并一起运行它会发现语法错误!您知道是什么原因造成的吗?
    • 不是真的不知道它是什么错误,我用 Python 2.7.2 从一个文件中运行它。我最好的猜测是从文件运行时使用不同的 Python 版本。
    • 它神奇地修复了自己!我不知道是什么导致了这个问题!感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2023-03-14
    • 2017-01-21
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多