2009-06-10 12 views
6

Ho bisogno di creare un programma di raccolta di contenuti che legge semplicemente numeri su pagine Web specificate e salva i dati per l'analisi in un secondo momento. Non ho bisogno di cercare collegamenti o dati correlati, basta raccogliere tutti i dati dai siti web che avranno contenuti che cambiano ogni giorno.Qual è la lingua di programma ideale per un web crawler?

ho pochissima esperienza di programmazione, e spero che questo sarà un bene per l'apprendimento. La velocità non è un problema enorme, ritengo che il crawler debba al massimo caricare 4000 pagine al giorno.

Grazie.

Edit: C'è un modo per testare in anticipo se i siti web da cui sto raccogliendo i dati sono protetti contro crawler?

risposta

9

Python probabilmente, o Perl.

Perl ha un bel LWP (Library for WWW in Perl), Python ha urllib2.

Entrambi sono semplici linguaggi di scripting disponibili sulla maggior parte dei sistemi operativi.

ho fatto un cingolato in Perl un bel paio di volte, si tratta di una serata di lavoro.

E no, non possono davvero proteggersi dai crawler, tranne che per l'utilizzo di CAPTCHA di sorta - tutto il resto è più facile da decifrare rispetto da configurare.

C'era un punto su Java: Java va bene. È più prolisso e richiede alcune impostazioni dell'ambiente di sviluppo: quindi non lo faresti in una sera, probabilmente una settimana. Per una piccola attività, che l'autore della domanda ha indicato, potrebbe essere eccessivo. D'altra parte, ci sono librerie molto utili come lint, tagsoup (traversal DOM per HTML casuale là fuori) e lucene (indicizzazione e ricerca di testo completo), quindi potresti volere Java per progetti più seri. In questo caso, raccomanderei la libreria Apache commons-httpclient per la scansione del web (o nutch se sei pazzo :).

Inoltre: ci sono prodotti di mensola che monitorano i cambiamenti su determinati siti web e li presentano in modi utili, quindi potresti prenderne uno.

+5

I siti Web non sono in grado di proteggersi dai crawler, ma i crawler sono tenuti all'osservanza del Protocollo di esclusione dei robot e i clienti sono obbligati a rispettare i termini del servizio per qualsiasi sito Web. –

+0

Sono d'accordo con te. – alamar

+0

La maggior parte delle cose sul web richiamano Java per la programmazione dei crawler. Java è troppo complicato? o qual è il problema? – Alex

-3

Direi PHP. È un linguaggio orientato al web, che significa molte funzioni di libreria per fare tutte le piccole cose che devi fare in un progetto come questo. Ha una buona lib per questo built-in (CURL), ed è un linguaggio semplice morto. Se lo continuerai a programmarlo, diventerai troppo veloce, ma per qualcosa di semplice come questo è una buona scelta.

+1

Non consiglierei PHP per lo scripting lato client. Può essere fatto, ma è al contrario. – alamar

+1

L'ho fatto e devo dire che è stato terribile. La mancanza di threading sta causando molti problemi nello scrivere un ragno efficiente. – Lothar

+0

Ho fatto più crawler PHP, ok ma a volte si rifiuta di ottenere elementi da alcuni URL, ma credimi Python è la scelta migliore, non ho lavorato con Perl ma c'mon man, Python è quello quello usato da Google! –

2

Esiste un modo per testare prima del tempo se i siti web da cui io sono raccolta dei dati sono protetti contro crawler?

Oltre ai CAPTCHA è buona norma rispettare il contenuto del file robots.txt, se esistente.

7

Il linguaggio con cui si è più a proprio agio è più che il migliore linguaggio da utilizzare.

ho pochissima programmazione esperienza

Potreste scoprire che un web crawler è un po 'un battesimo del fuoco ed è necessario per costruire un paio di altre applicazioni più banali per acquisire familiarità con il vostro lingua scelta (e quadro se applicabile).

Buona fortuna!

1

Perl o python sono le scelte più ovvie, dipende da cosa si adatta meglio alla fine della giornata. Né sono così difficili, ma in generale, se si scopre che si preferisce un linguaggio linguistico fluente che è perl flessibile, si adatta meglio a te, dove ti sembra di preferire un linguaggio più rigido con una mentalità più matematica (specialmente nel credere che ci sia solo un modo per fare qualcosa di giusto) allora probabilmente ti sentiresti più a tuo agio in pitone. Altre lingue possono fare il lavoro abbastanza bene, ma quelle due sono scelte ovvie a causa della portabilità ed essere linguaggi forti per le attività di scripting CLI, in particolare la manipolazione del testo, oltre ad essere forti linguaggi webdev che portano a un gran numero di moduli utili disponibili per attività orientate al web (dando il beneficio di php menzionato, ma senza gli aspetti negativi di php per clientide). Se un gran numero di moduli utili è disponibile per te, allora Perl ha enormi quantità in più per questo tipo di attività rispetto a qualsiasi altra lingua (su CPAN) potrebbe valere la pena controllare se c'è un codice che puoi riutilizzare là prima di prendere il immergiti in quale lingua usare. In certe aree uno è più veloce dell'altro (Python generalmente eccelle in matematica complessa, perl può generalmente processare il testo più velocemente, dipende da come lo si fa).

Altre scelte linguistiche sono disponibili, un linguaggio compilato è meno portabile e quindi in genere più difficile da configurare su un server, tuttavia viene eseguito più rapidamente. I linguaggi di scripting sono generalmente progettati per manipolare testo e file con maggiore facilità rispetto ai linguaggi compilati, sebbene non sempre siano veri. Mi sento più a mio agio con Perl, quindi lo userei, ma io dico che non è la base su cui dovresti prendere una decisione, scopri quali sono le risorse che puoi usare e quali ti piace sentire meglio (leggi alcune codice vedere quale stile ha più senso per te) e poi decidere.

Oh e orielly hanno un libro sulla programmazione dell'intelligenza collettiva rivolta ai principianti sull'argomento, non l'ho mai letto ma dovrebbe essere piuttosto buono, sfogliarlo in un negozio e considerarlo come il suo argomento principale del web -Algoritmi di crawler ... Usa python per degli esempi.

3

Ho creato un webcrawler una volta, ma è stato creato per cercare tra i siti per altri collegamenti ad altri siti e seguirli. Doveva ricordare quei collegamenti e assicurarsi che non visitassi un sito due volte, quindi avevo bisogno di un modo molto rapido per verificare la presenza di URL duplicati. Per fare questo, ho creato la mia tabella hash in Delphi 2007. Con alcune conoscenze aggiuntive su come utilizzare l'interfaccia COM di Internet Explorer, sono riuscito a leggere un bel po 'di pagine in un breve lasso di tempo. Ho usato Delphi per scrivere questo crawler perché volevo un sacco di prestazioni.

Inoltre, ho scelto anche Delphi perché è la lingua con cui mi sento più a mio agio, inoltre mi ha aiutato a imparare molto su diversi argomenti interessanti, incluso su come scrivere i propri algoritmi di hash table. Inoltre, è stata una sfida molto interessante per un programmatore esperto come me.

Il mio consiglio è già stato fornito: utilizzare gli strumenti con i quali si è più a proprio agio.

1

Se sei un principiante, suggerirei un linguaggio "facile" come REBOL. In REBOL, uno script di base per controllare un gruppo di pagine di Wikipedia per le modifiche apparirebbe come il seguente codice.Ovviamente, "facile" è soggettivo e avresti ancora bisogno di alcune modifiche di base a questo codice per soddisfare le tue esigenze.

record: carica% records.txt
; (Contenuto del file di records.txt sembra questo- rientro non è importante)
[
        [en.wikipedia.org/wiki/Budget_deficit
        "deficit degli Stati Uniti Budget (wikipedia)"
        {< li id ​​= "lastmod" > Questa pagina è stata modificata l'ultima volta il}
        "1 giugno 2009 a 11:26. "]

        [en.wikipedia.org/wiki/List_of_U.S._states_by_unemployment_rate
        "US Tasso di disoccupazione (wikipedia)"
        {< li id ​​= "lastmod" > Questa pagina è stata modificata l'ultima volta il}
        "25 Mag 2009 alle 20:15."]
]

; Ora ciclo tra i record e verificare web per le modifiche
record rec foreach [
    html: leggere rec/1    ; aggiungere errori chking qui per i 404 o timeout
        parse/HTML [qualsiasi [thru rec/3 copia curr-mod-data per </li >]]
            meno rec/4 = curr-mod-data [
                    stampa [ "CHANGE rilevato:" REC/2]
                   ; analizzare di nuovo per raccogliere e salvare i dati pagina specifica qui
                   ; aggiorna% record.file txt con timestamp aggiornate
         ]
]

REBOL non è noto, ma è accogliente, molto piccola, cross-platform e GUI-abilitato. Ho avuto molto successo con esso per script veloci e sporchi.

Problemi correlati