Domanda

Vorrei ottenere dati da diverse pagine web come indirizzi di ristoranti o date di eventi diversi per una determinata località e così via.Qual è la migliore libreria che posso utilizzare per estrarre questi dati da un determinato insieme di siti?

È stato utile?

Soluzione

Se usi Python, dai un'occhiata a Beautiful Soup (http://crummy.com/software/BeautifulSoup).

Una libreria estremamente capace, rende lo scraping un gioco da ragazzi.

Altri suggerimenti

L'HTML Agility Pack per programmatori .net è fantastico.Trasforma le pagine Web in documenti XML che possono essere interrogati con XPath.

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
att.Value = FixLink(att);
}
doc.Save("file.htm");

Potete trovare qui. http://www.codeplex.com/htmlagilitypack

Penso che la risposta generale qui sia usare qualsiasi linguaggio + libreria http + parser html/xpath.Trovo che l'utilizzo di ruby ​​+ hpricot offra una soluzione piacevole e pulita:

require 'rubygems'
require 'hpricot'
require 'open-uri'

sites = %w(http://www.google.com http://www.stackoverflow.com)

sites.each do |site|
  doc = Hpricot(open(site))

  # iterate over each div in the document (or use xpath to grab whatever you want)
  (doc/"div").each do |div|
    # do something with divs here
  end
end

Per ulteriori informazioni su Hpricot vedere http://code.whytheluckystiff.net/hpricot/

Personalmente mi piace il WWW::Meccanizzare Modulo Perl per questo tipo di attività.Ti dà un oggetto modellato su un tipico browser web (ad es.puoi seguire i collegamenti, compilare moduli o utilizzare il "pulsante Indietro" richiamando i metodi su di esso).

Per l'estrazione del contenuto vero e proprio, potresti quindi collegarlo a HTML::TreeBuilder per trasformare il sito web che stai attualmente visitando in un albero di HTML::Elemento oggetti ed estrai i dati desiderati (il look_down() metodo di HTML::Element è particolarmente utile).

penso che il watir o il selenio siano le scelte migliori.La maggior parte delle altre librerie menzionate sono in realtà parser HTML, e non è quello che vuoi...Stai raschiando, se il proprietario del sito web volesse che tu acceda ai suoi dati, metterebbe un dump del suo database o del suo sito su un torrent ed eviterebbe tutte le richieste http e il traffico costoso.

fondamentalmente, devi analizzare l'HTML, ma soprattutto automatizzare un browser.Questo al punto da poter muovere il mouse e fare clic, praticamente imitando un utente.È necessario utilizzare un programma di cattura dello schermo per ottenere i captcha e inviarli a decaptcha.com (che li risolve per una frazione di centesimo) per aggirare questo problema.dimentica di salvare quel file captcha analizzando l'HTML senza renderlo in un browser "come dovrebbe essere visto".Stai effettuando lo screenscraping, non httprequestscraping.

watir ha funzionato per me in combinazione con autoitx (per spostare il mouse e inserire tasti nei campi -> a volte è necessario impostare gli eventi javascript corretti) e una semplice utility di cattura dello schermo per i captcha.in questo modo avrai più successo, è abbastanza inutile scrivere un ottimo parser html per scoprire che il proprietario del sito ha trasformato parte del testo in grafica.(Problematico?no, prendi semplicemente una libreria OCR e inserisci il jpeg, il testo verrà restituito).Inoltre raramente li ho visti arrivare a tanto, anche se sui siti cinesi c'è molto testo nella grafica.

XPath mi ha sempre salvato la giornata, è un ottimo linguaggio specifico per il dominio (IMHO, potrei sbagliarmi) e puoi accedere a qualsiasi tag nella pagina, anche se a volte è necessario modificarlo.

Ciò che mi mancava erano i "modelli inversi" (il framework robotico del selenio ne ha uno).Perl aveva questo nel modulo CPAN Template::Extract, molto utile.

L'analisi dell'html, o la creazione del DOM, lascerei al browser, sì, non sarà così veloce, ma funzionerà sempre.

Anche le librerie che fingono di essere Useragent sono inutili, i siti oggi sono protetti contro lo scraping, e spesso è necessario il rendering del sito su uno schermo reale per andare oltre i captcha, ma anche eventi javascript che devono essere attivati ​​per far apparire le informazioni, ecc. .

Watir se ti piace Ruby, Selenium per il resto direi.L'"Emulatore Umano" (o Emulatore Web in Russia) è fatto apposta per questo tipo di scraping, ma si tratta comunque di un prodotto russo di un'azienda che non nasconde le sue intenzioni.

Penso anche che una di queste settimane Wiley pubblicherà un nuovo libro sullo scraping, che dovrebbe essere interessante.Buona fortuna...

Personalmente trovo http://github.com/shuber/curl/tree/master E http://simplehtmldom.sourceforge.net/ fantastico per l'uso nei miei progetti di spidering/scraping PHP.

Il Perl WWW::Meccanizzare La libreria è eccellente per svolgere il lavoro di interazione con un sito Web per accedere alla pagina effettiva di cui hai bisogno.

Vorrei usare LWP (Libwww per Perl).Ecco una buona piccola guida: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html

WWW::Scraper ha documenti qui: http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.htmlPuò essere utile come base, probabilmente vorrai creare il tuo modulo adatto alle esigenze di mining del tuo ristorante.

LWP ti fornirà un crawler di base su cui basarti.

Ci sono state diverse risposte che raccomandavano Perl Mechanize, ma penso che Ruby Mechanize (molto simile alla versione di Perl) sia ancora migliore.Gestisce alcune cose come i moduli in un modo molto più pulito dal punto di vista sintattico.Inoltre, ci sono alcuni frontend che funzionano in cima di Ruby Mechanize che rendono le cose ancora più semplici.

Che lingua vuoi usare?

curl con awk potrebbe essere tutto ciò di cui hai bisogno.

Puoi usare Ordinato per convertirlo in XHTML, quindi utilizzare qualunque funzionalità di elaborazione XML abbia a disposizione il linguaggio preferito.

Lo consiglierei Bella zuppa.Non è il più veloce ma funziona molto bene per quanto riguarda la non corretta formattazione delle pagine (X)HTML su cui la maggior parte dei parser si blocca.

quello che qualcuno ha detto.

usa QUALSIASI LINGUA.

finché hai una buona libreria parser e una libreria http, sei a posto.

le cose sull'albero sono più lente, quindi usano solo una buona libreria di analisi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top