Получение всех URL-адресов с использованием гема анемона (очень большой сайт)

Сайт, который я хочу проиндексировать, довольно большой, 1.x миллионов страниц. Мне просто нужен json-файл со всеми URL-адресами, чтобы я мог выполнять над ними некоторые операции (сортировка, группировка и т. Д.).

Базовая петля анемона работала хорошо:

require 'anemone'

Anemone.crawl("http://www.example.com/") do |anemone|
  anemone.on_every_page do |page|
      puts page.url
  end
end

Но (из-за размера сайта?) Терминал через некоторое время завис. Поэтому я установил MongoDB и использовал следующее

require 'rubygems'
require 'anemone'
require 'mongo'
require 'json'


$stdout = File.new('sitemap.json','w')


Anemone.crawl("http://www.mybigexamplesite.com/") do |anemone|
  anemone.storage = Anemone::Storage.MongoDB
  anemone.on_every_page do |page|
      puts page.url
  end
end

Сейчас он работает, но я буду очень удивлен, если в утреннем утреннем выпуске появится файл json - я никогда раньше не пользовался MongoDB, и часть документации анемона об использовании хранилища не была ясна (для меня) по крайней мере). Может кто-нибудь, кто делал это раньше, дать мне несколько советов?

2 ответа

Решение

Если кому-то нужно <= 100 000 URL-адресов, Ruby Gem Spidr - отличный способ.

Вероятно, это не тот ответ, который вы хотели увидеть, но я настоятельно советую вам не использовать Anemone и, возможно, Ruby для сканирования миллиона страниц.

Анемон не является поддерживаемой библиотекой и не работает во многих крайних случаях.

Ruby не является самым быстрым языком и использует глобальную блокировку интерпретатора, что означает, что вы не можете иметь истинные возможности потоков. Я думаю, что ваше сканирование, вероятно, будет слишком медленным. Для получения дополнительной информации о потоках, я предлагаю вам проверить следующие ссылки.

http://ablogaboutcode.com/2012/02/06/the-ruby-global-interpreter-lock/

У ruby ​​есть реальная многопоточность?

Вы можете попробовать использовать анемон с Rubinius или JRuby, который намного быстрее, но я не уверен в степени совместимости.

Я добился некоторого легкого успеха от Анемона до Натча, но ваш пробег может отличаться.

Другие вопросы по тегам