Получение всех 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, который намного быстрее, но я не уверен в степени совместимости.
Я добился некоторого легкого успеха от Анемона до Натча, но ваш пробег может отличаться.