У меня есть начальная страница http://www.example.com/startpage, в которой 1220 списков разбиты по страницам стандартным способом, например, 20 результатов на странице.
У меня работает код, который анализирует первую страницу результатов и переходит по ссылкам, которые содержат "example_guide / paris_shops" в их URL. Затем я использую Nokogiri, чтобы получить конкретные данные этой последней страницы. Все работает хорошо, и 20 результатов записываются в файл.
Однако я не могу понять, как заставить Anemone сканировать до следующей страницы результатов (http://www.example.com/startpage?page=2), а затем продолжить анализ этой страницы, а затем до 3-й страницы (http://www.example.com/startpage?page=3) и т. Д. *) 1009 *
Так что я хотел бы спросить, знает ли кто-нибудь, как я могу заставить анемон начать на странице, проанализировать все ссылки на этой странице (и следующий уровень данных для конкретных данных), но затем перейти к нумерации страниц до следующего страница результатов, так что анемона может начать анализ снова и так далее, и так далее. Учитывая, что ссылки на страницы отличаются от ссылок в результатах, Anemone, конечно, не следует за ними.
В данный момент я загружаю URL для первой страницы результатов, позволяю завершить это, а затем вставляю в следующий URL для 2-й страницы результатов и т. Д. И т. Д. Очень ручной и неэффективный, особенно для получения сотен страниц.
Любая помощь будет высоко ценится.
require 'rubygems'
require 'anemone'
require 'nokogiri'
require 'open-uri'
Anemone.crawl("http://www.example.com/startpage", :delay => 3) do |anemone|
anemone.on_pages_like(/example_guide\/paris_shops\/[^?]*$/) do | page |
doc = Nokogiri::HTML(open(page.url))
name = doc.at_css("#top h2").text unless doc.at_css("#top h2").nil?
address = doc.at_css(".info tr:nth-child(3) td").text unless doc.at_css(".info tr:nth-child(3) td").nil?
website = doc.at_css("tr:nth-child(5) a").text unless doc.at_css("tr:nth-child(5) a").nil?
open('savedwebdata.txt', 'a') { |f|
f.puts "#{name}\t#{address}\t#{website}\t#{Time.now}"
}
end
end