Python 屏幕抓取时处理javascript重页面的选项

Python 屏幕抓取时处理javascript重页面的选项,python,screen-scraping,Python,Screen Scraping,免责声明:我真的不是程序员。我渴望学习,但我的经验基本上是20年前的c64和几天的Python学习 我刚刚开始一个相当大的(对我来说是初学者)屏幕抓取项目。到目前为止,我一直在使用python和mechanize+lxml进行浏览/解析。现在我遇到了一些非常重javascript的页面,在没有启用javascript的情况下不会显示任何内容,这意味着mechanize会遇到麻烦 从我的搜索中,我得出结论,我基本上有几个选择: 试图弄清楚javascript在我的代码中做的模拟是什么(我不知道从哪

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

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

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

  • 试图弄清楚javascript在我的代码中做的模拟是什么(我不知道从哪里开始;-)

  • 使用pywin32控制internetexplorer或类似的东西,比如从pyqt4使用webkit浏览器,甚至使用telnet和mozerpl(这似乎非常困难)

  • 将语言切换到perl,因为www::Mechanize在per(javascript的插件等)上似乎要成熟得多。我对这件事不太了解


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

    第四种选择可能是使用

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

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

    我用于简单任务,而python webkit用于更复杂的任务。我在这两方面都有很好的经验

    下面是一个用于呈现网页(包括执行任何JavaScript)并返回结果HTML的代码段:

    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
    

    您可能可以在其他地方找到正在查找的数据。尝试使用firefox中的WebDeveloper工具栏查看javascript加载的内容。可能您可以在js文件中找到数据

    否则,您可能需要使用Mechanize。这里有两个教程,您可能会发现它们很有用:


    对于非程序员,我建议使用IRobotSoft进行编译。它是面向视觉的,并且完全支持javascript。缺点是它只在Windows上运行。好的是,你可以通过反复尝试学习软件而成为专家

    一般来说,你想解决什么问题?我需要将存储在表中的数据(一般来说,不总是)放到数据库中。这看起来非常有趣。我遇到的一个问题是,我得到了一个QString类型的对象。如果我试图将它传递给lxml,我会遇到问题,因为它不知道这是什么。如何将QString转换为unicode字符串?chickenfoot的东西也很酷!我在一个小时内写了很多脚本。是的,当与其他库集成时,QString很烦人。幸运的是,您可以轻松地使用str(qstring_变量)进行转换。