2012-02-05 4 views
12

Sto pianificando di scrivere un webcrawler per un progetto NLP, che legge la struttura di thread di un forum ogni volta in un intervallo specifico e analizza ogni thread con nuovi contenuti. Attraverso le espressioni regolari, vengono estratti l'autore, la data e il contenuto dei nuovi post. Il risultato viene quindi memorizzato in un database.Erlang è la scelta giusta per un webcrawler?

La lingua e la Piattaforma utilizzata per il crawler devono corrispondere ai seguenti criteri:

  • facilmente scalabile su più core e CPU
  • adatti per alta I carichi/O
  • veloce espressione regolare che corrisponde
  • facilmente per mantenere/alcune spese operative

Dopo alcune ricerche penso Erlan g potrebbe essere un candidato adatto, ma ho letto che non è molto bravo nell'elaborazione delle stringhe (e quindi nella corrispondenza delle espressioni regolari). Né ho alcuna esperienza circa il fattore di manutenzione.

Erlang è una buona tecnologia per lo scenario sopra descritto? E se no, quale sarebbe una buona alternativa?

+1

Questo probabilmente è meglio richiesto su http: //programmers.stackexchange.com; cade sotto "non costruttivo" qui IMHO –

+0

I tuoi criteri hanno almeno tanto a che fare con il design e l'architettura generale come la lingua. Puoi costruire webcrawlers scalabili in Erlang, Python, Java, qualunque cosa. Dipende anche dalla tua attuale esperienza linguistica di programmazione e dai tuoi tempi. – DNA

+0

Mi piacerebbe davvero usare Erlang per questo progetto perché potrebbe essere la soluzione migliore da quello che ho letto finora. La mia domanda è, se il cattivo regex matching lo rende un no-go per questo progetto e quanto in alto le spese operative (specialmente per la manutenzione) sarebbero per questo nella pratica. – Thomas

risposta

7

Sto anche valutando l'uso di erlang come web crawler e sembra buono finora.

Ci sono un sacco di moduli utile esistenti: HTML parser, HTTP client, XPath, regex, cache.

E otherpeople sono interessati allo stesso caso d'uso, quindi è possibile imparare da loro.

Tuttavia, se questo è solo un progetto a parte, consiglio Python/Ruby/Perl perché sarà più facile iniziare.

+0

Grazie per la risposta e i collegamenti forniti. Il progetto mira a durare più a lungo, i costi aggiuntivi per imparare Erlang sono trascurabili (in realtà sarebbe divertente imparare una nuova lingua :)) – Thomas

+1

sì, è divertente imparare qualcosa di così diverso. Ho lavorato a questo tutorial: http://learnyousomeerlang.com/ – hoju

3

Se sei familiare e a tuo agio con l'erlang, me ne starei con te se fossi in te, anche se non ho familiarità con l'erlang. Con quello notato, ti darò alcuni suggerimenti:

  1. Non utilizzare le espressioni regolari per analizzare HTML, utilizzare invece XPATH.
    HTML, mentre strutturato, è ancora abbastanza difficile da analizzare in natura e regular expressions are fairly slow and unreliable for parsing HTML.
  2. Determinare che cosa il vostro crawler architecture sta per essere e qual è il tuo re-visit policy.
  3. Trova il best selection policy per te e implementalo.

Un web crawler è un sistema abbastanza complesso da costruire e bisogna preoccuparsi di velocità, prestazioni, scalabilità e concorrenza. Alcuni dei crawler più importanti sono scritti in C++ and Java, ma non ho sentito alcun crawler scritto in erlang.

+0

Grazie per il suggerimento. Il mio parser deve essere scritto specificamente per il forum che sto per analizzare e ho bisogno solo di parti molto piccole dell'intero albero xhtml, quindi le regex potrebbero essere molto più economiche di Xpath. Penso che le preoccupazioni sollevate rendano Erlang una soluzione perfetta, a seconda del possibile collo di bottiglia della corrispondenza regex. – Thomas

+0

Quanta scansione si prevede di fare? Quante pagine all'ora? Se non stai facendo troppe cose, la regex non ti ucciderà, ma sarà comunque meno affidabile e più lenta di xpath, imho. Regex è anche un problema da mantenere, eseguire il debug e capire, quindi cerco di evitarlo a tutti i costi. Questa è solo la mia preferenza. Se mi parli ancora dei requisiti di rendimento, allora posso anche raccomandare altre cose come alcuni documenti sull'architettura di cralwer. – Kiril

+0

sei corretto che le regex sono meno affidabili, tuttavia sono generalmente più veloci di XPath – hoju

3

Erlang va bene per questo. I delegati della libreria regex (quasi tutti) lavorano su PCRE, che dovrebbe essere abbastanza veloce. Ma evita le stringhe e usa invece i binari! Entrambi usano molta meno memoria e sono più veloci da tradurre in stringhe C.