Ho una pagina iniziale di http://www.example.com/startpage che ha 1220 elenchi suddivisi per impaginazione nel modo standard, ad es. 20 risultati per pagina.Aiuto necessario con lo screen scraping usando anemone e nokogiri
Ho codice di lavoro che analizza la prima pagina dei risultati e segue i collegamenti che contengono "example_guide/paris_shops" nella loro url. Quindi uso Nokogiri per estrarre dati specifici di quella pagina finale. Tutto funziona bene e i 20 risultati sono scritti in un file.
Tuttavia non riesco a capire come ottenere Anemone per eseguire la scansione alla pagina successiva dei risultati (http://www.example.com/startpage?page=2) e quindi continuare ad analizzare quella pagina e poi la terza pagina (http://www.example.com/startpage?page=3) e così via.
Quindi vorrei chiedere se qualcuno sa come posso far sì che anemone inizi su una pagina, analizzare tutti i collegamenti su quella pagina (e il prossimo livello di dati per dati specifici) ma poi seguire l'impaginazione per la prossima pagina di risultati in modo che anemone possa ricominciare l'analisi e così via. Dato che i collegamenti di paginazione sono diversi dai collegamenti nei risultati, Anemone ovviamente non li segue.
Al momento sto caricando l'url per la prima pagina di risultati, lasciando quella finitura e quindi incollando nell'URL successivo per la seconda pagina di risultati ecc. Ecc. Molto manuale e inefficiente soprattutto per ottenere centinaia di pagine.
Qualsiasi aiuto sarebbe molto apprezzato.
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
Grazie Greg - questo dovrebbe aiutare a farmi iniziare. Ho usato Anemone per la sua facilità di afferrare le pagine che corrispondono alle sue "on_pages_like". Immagino che Nokogiri possa anche farlo, quindi attaccherò i documenti e vedrò cosa ottengo. Ancora una volta, grazie per il tuo aiuto – ginga
Dalla tua descrizione di come sono disposte le pagine, non è necessario cercare le informazioni sulla pagina successiva; Stanno usando un collegamento standard della pagina successiva, quindi inserisci il numero di pagina in una stringa e recuperalo. Nokogiri può facilmente individuare il collegamento alla pagina successiva, ma non sembra necessario, quindi non perdere tempo se puoi evitarlo. Questa pagina su Stack Overflow potrebbe aiutare: http://stackoverflow.com/questions/2807500/following-a-link-using-nokogiri-for-scraping –
Questo trucco ha funzionato per me ... – Avishai