Tengo una página de inicio de http://www.example.com/startpage que tiene 1220 listados divididos por paginación de la manera estándar, por ejemplo, 20 resultados por página.Ayuda necesaria con raspado de pantalla con anémona y nokogiri
Tengo un código de trabajo que analiza la primera página de resultados y sigue los enlaces que contienen "example_guide/paris_shops" en su url. Luego uso Nokogiri para obtener datos específicos de esa página final. Todo funciona bien y los 20 resultados se escriben en un archivo.
Sin embargo, parece que no puedo averiguar cómo hacer que Anemone también rastree la próxima página de resultados (http://www.example.com/startpage?page=2) y luego continúe analizando esa página y luego la 3ª página (http://www.example.com/startpage?page=3) y así sucesivamente.
Así que me gustaría preguntar si alguien sabe cómo puedo obtener una anémona para comenzar en una página, analizar todos los enlaces en esa página (y el siguiente nivel de datos específicos) pero luego seguir la paginación al página siguiente de resultados para que anémona pueda comenzar a analizar de nuevo y así sucesivamente. Dado que los enlaces de paginación son diferentes de los enlaces en los resultados, Anemone no los sigue.
En este momento estoy cargando la url para la primera página de resultados, dejando que termine y pegue en la siguiente url para la segunda página de resultados, etc. Muy manual e ineficiente especialmente para obtener cientos de páginas.
Cualquier ayuda sería muy apreciada.
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
Gracias Greg - eso debería ayudarme a comenzar. Utilicé Anemone por su facilidad para captar páginas que coinciden con su "on_pages_like". Supongo que Nokogiri probablemente también pueda hacer esto, así que hurgaré en los documentos y veré qué obtengo. Una vez más, gracias por su ayuda – ginga
Según su descripción de cómo se presentan las páginas, no necesita buscar la siguiente información de la página; Están usando un enlace estándar de la próxima página, así que simplemente rellene el número de página en una cadena y recupérelo. Nokogiri puede localizar fácilmente el enlace de la página siguiente, pero no parece que sea necesario, así que no pierdas el tiempo si puedes evitarlo. Esta página en Stack Overflow podría ayudar: http://stackoverflow.com/questions/2807500/following-a-link-using-nokogiri-for-scraping –
Este truco funcionó para mí ... – Avishai