刮刮启用Ajax的网页

时间:2013-09-30 08:49:02

标签: ruby nokogiri scrapy mechanize watir

我需要抓住多家公司的职业网页(经过他们的许可)。

决定使用什么的重要因素

  1. 我每天要抓大约2000页,所以需要一个体面的快速 溶液
  2. 其中一些页面在加载页面后通过ajax填充数据。
  3. 我的webstack是带有MySql等的Ruby / Rails。
  4. 我之前使用scrapy(python)编写了刮刀(+启用了ajax页面的Selenium)。
  5. 我的怀疑

    1. 我很困惑我是否应该使用python(即scrapy + Selenium,我认为这是python中最好的选择),或者更喜欢ruby中的东西(因为我的整个代码库都是ruby)。
    2. Scrapy + selenium通常很慢,ruby中有更快的替代品吗?(这会让决策变得更容易)支持Ajax Loaded页面的最流行的Ruby替代品似乎 Watir 任何人都可以发表评论它的速度。还有其他任何红宝石替代品(例如 Mechanize / Nokogiri + Ajax加载页面的其他内容
    3. 修改

      使用Watir-webdriver + Nokogiri结束,以便在存储数据时可以利用活动记录。在提取数据时,Nokogiri比Watir-webdriver快得多。

      Scrapy本来会更快,但速度权衡并不像处理scrapy中不同类型网站的复杂性权衡那样重要(例如,我必须经历一些目标网站上的ajax驱动搜索)。

      希望这有助于某人。

2 个答案:

答案 0 :(得分:1)

如果速度很重要,您可以使用watir-webdriver gem来驱动PhantomJS(支持JavaScript的无头浏览器)。打开PhantomJS中的任何页面,如果watir-webdriver太慢而无法从中获取数据,您可以将呈现的HTML传递给Nokogiri

了解更多:

答案 1 :(得分:1)

您应该查看Google发布的本指南Making AJAX Applications Crawlable, 它讨论了一些网站支持的AJAX爬行方案。

您希望在URL的哈希片段中查找#!,这向爬网程序指示该站点支持AJAX爬网方案,并且当稍微修改URL时,服务器将返回页面的HTML快照。

Full Specification