У меня есть начальная страница 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) и так далее.
Поэтому я хотел бы спросить, знает ли кто-нибудь, как я могу заставить анемон начать работу на странице, проанализировать все ссылки на этой странице (и следующий уровень данных для конкретных данных), но затем перейти к следующей странице результатов. так что анемон может снова начать синтаксический анализ и так далее и тому подобное. Учитывая, что ссылки на страницы отличаются от ссылок в результатах, 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