5

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

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

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

我的疑惑

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

编辑

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

Scrapy 本来会更快,但速度权衡不如在 scrapy 中处理不同类型网站的复杂性权衡重要(例如,在某些目标网站上进行 ajax 驱动的搜索,我必须通过这些)。

希望这可以帮助某人。

4

2 回答 2

1

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

阅读更多:

于 2013-09-30T09:48:03.670 回答
1

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

您要#!在 URL 的哈希片段中查找,这向爬虫表明该站点支持 AJAX 爬取方案,并且当 URL 稍作修改时,服务器将返回页面的 HTML 快照。

完整规格

于 2013-10-01T02:46:44.203 回答