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

时间:2010-10-13 23:58:43

标签: python screen-scraping

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

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

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

  1. 试着弄清楚javascript在做什么模仿我的代码(我不知道从哪里开始。; - ))

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

  3. 将语言切换为perl,因为www :: Mechanize似乎在per(addons等javascript)上更加成熟。完全不了解这一点。

  4. 如果有人在这里有一些指针会很棒。我知道我需要做很多试验和错误,但如果有这样的事情我会不会离“真正的”答案太远。

4 个答案:

答案 0 :(得分:1)

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

否则,您可能需要使用Mechanize。您可能会在这里找到两个有用的教程:

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

答案 1 :(得分:0)

第四个选项可能是使用browserjs

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

我自己并没有真正使用它,我尝试了几次,但发现它对我的目的来说太慢了。虽然我没有尝试过,但是你可能需要设置一个选项或者其他一些选项。

答案 2 :(得分:0)

我使用Chickenfoot执行简单任务,使用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

答案 3 :(得分:0)

对于非程序员,我建议使用IRobotSoft。它是面向视觉和完整的JavaScript支持。缺点是它只在Windows上运行。好处是你可以通过反复试验成为专家来学习软件。