【问题标题】:Options for handling javascript heavy pages while screen scraping屏幕抓取时处理 javascript 繁重页面的选项
【发布时间】:2010-10-13 23:58:43
【问题描述】:

此处免责声明:我真的不是程序员。我渴望学习,但我的经验是 20 年前的 c64 和几天学习 Python 的基本经验。

我刚刚开始进行一个相当大的(对于我作为初学者而言)屏幕抓取项目。到目前为止,我一直在使用带有 mechanize+lxml 的 python 进行浏览/解析。现在我遇到了一些真正的 javascript 繁重的页面,在没有启用 javascript 的情况下不会显示任何内容,这意味着机械化的麻烦。

从我的搜索中,我得出的结论是,我基本上有几个选择:

  1. 试图弄清楚 javascript 在我的代码中做了什么模拟(我不太清楚从哪里开始。;-))

  2. 使用 pywin32 控制 Internet Explorer 或类似的东西,例如使用 pyqt4 中的 webkit-browser 甚至使用 telnet 和 mozrepl(这似乎很难)

  3. 将语言切换到 perl,因为 www::Mechanize 似乎在 per(javascript 的插件等)上更加成熟。对这个完全不了解。

如果有人在这里有一些指示,那就太好了。我知道我需要做很多试验和错误,但是如果有这样的事情,我不会离“真实”答案太远。

【问题讨论】:

  • 您一般要解决什么问题?
  • 我需要将存储在表中的数据(通常,并非总是如此)放入数据库中。

标签: python screen-scraping


【解决方案1】:

您也许可以在其他地方找到您正在寻找的数据。尝试使用 Firefox 中的 web-developer 工具栏来查看 javascript 正在加载什么。可能是你可以在js文件中找到数据。

否则,您可能确实需要使用机械化。有两个教程可能对您有用:

http://scraperwiki.com/help/tutorials/python/

【讨论】:

    【解决方案2】:

    第四个选项可能是使用browserjs

    这应该是一种在 Mozilla Rhino 或其他命令行 javascript 引擎中运行浏览器环境的方法。假设您可以(至少在理论上)在该环境中加载页面并在 JS 使用它之后转储 HTML。

    我自己并没有真正使用过它,我尝试了几次,但发现它对于我的目的来说太慢了。不过我并没有很努力,可能需要设置一个选项或类似的选项。

    【讨论】:

      【解决方案3】:

      我使用Chickenfoot 处理简单的任务,使用 python-webkit 处理更复杂的任务。两者都有很好的经验。

      这是一个渲染网页(包括执行任何 JavaScript)并返回结果 HTML 的 sn-p:

      class Render(QWebPage):
        def __init__(self, url):
          self.app = QApplication(sys.argv)
          QWebPage.__init__(self)
          self.loadFinished.connect(self._loadFinished)
          self.mainFrame().load(QUrl(url))
          self.app.exec_()
      
        def _loadFinished(self, result):
          self.html = str(self.mainFrame().toHtml())
          self.app.quit()
      
      html = Render(url).html
      

      【讨论】:

      • 这看起来很有趣。我遇到的一个问题是我得到了一个 QString 类型的对象。如果我尝试将其传递给 lxml,我会遇到问题,因为它不知道那是什么。如何将 QString 转换为 unicode 字符串?鸡脚的东西也很酷!我在短短一个小时内编写了大量脚本。
      • 是的,QString 在与其他库集成时很烦人。幸运的是,您可以使用 str(qstring_variable) 轻松转换。
      【解决方案4】:

      对于非程序员,我推荐使用 IRobotSoft。它是面向视觉的,并具有完整的 JavaScript 支持。缺点是它只能在 Windows 上运行。好处是您可以通过反复试验来学习软件,从而成为专家。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        相关资源
        最近更新 更多