刮刮启用Ajax的网页

nik*_*k-v 5 ruby mechanize watir nokogiri scrapy

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

决定我使用什么的重要因素

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

我的疑惑

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

编辑

使用Watir-webdriver + Nokogiri结束,这样我就可以在存储数据的同时利用活动记录.在提取数据时,Nokogiri比Watir-webdriver快得多.

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

希望这有助于某人.

Žel*_*pin 1

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

阅读更多: