Crawler - scelta del linguaggio di programmazione [chiuso]

-2

Attualmente sto sviluppando un web crawler. La prima versione è stata sviluppata in Node.js e funziona piuttosto bene.

I problemi che ho riscontrato con Node.js non sono in ordine particolare:

  • libreria di analisi di URL lento e stringa di query
  • analisi dei pacchetti HTTP lenta a causa del sovraccarico della chiamata di binding C ++
  • rallenta la risoluzione DNS a causa della chiamata sincrona a getaddrinfo anziché della libreria C-Ares asincrona
  • mancanza di un buon supporto Unicode in RegExps

Questi sono per la maggior parte dovuti al fatto che è ancora molto giovane e che si tratta di una lingua generica con un piccolo team di sviluppo principale.

La proof-of-concept che ho al momento funziona abbastanza bene grazie alla natura asincrona di Node.js e alcune patch di scimmia che ho dovuto aggiungere.

Ora sto iniziando a pensare a cosa viene dopo la dimostrazione del concetto.

La questione del linguaggio di programmazione è una questione alla quale non ero ancora in grado di rispondere.

Le qualità essenziali che sto cercando:

  • I / O e gestione della concorrenza
  • capacità di analisi rapida delle stringhe per messaggi HTTP, HTML, JSON ... ecc.
  • collegamenti a una sorta di livello di accodamento / persistenza

Ho pensato a C, Erlang, Rust, Go e D.

So che questo non è solitamente il tipo di domande che sono accettate qui su Stack Exchange, ma non sono sicuro di quale altra parte potrei ottenere una risposta.

Aggiornamento: altre informazioni:

  • al momento utilizziamo 8 core, 3.2 Ghz.
  • il livello di persistenza è garantito dall'esecuzione di un database PostgreSQL
  • il punto è quello di eseguire la scansione di tutti i tipi di siti di notizie e blog, nonché i feed RSS
  • attualmente inoltriamo il contenuto a una pipeline di elaborazione tramite Apache Kafka
posta m_vdbeek 01.05.2015 - 13:41
fonte

1 risposta

3

Ho sviluppato un crawler in Python per scopi didattici ( Scraper di TripAdvisor ).

È basato su Scrapy per la scansione del Web e sceglierei Python perché è utile per le tecniche di Natural Language Processing, hai un sacco di toolkit e risorse (NLTK). Python non è così veloce per elaborare grandi volumi di dati e devi occuparti della gestione della memoria per mantenere le cose veloci. Scrapy non è in grado di eseguire JavaScript sulle pagine Web, quindi se hai qualcosa che cambia in fase di esecuzione tramite JS, non sarai in grado di recuperarlo.

Ora sto scrivendo un sistema asincrono completo, in grado di scalare e riparare autonomamente, per eseguire la scansione dei dati da varie fonti.

Uso Scala per la programmazione funzionale (nessun effetto collaterale, facile raggiungimento di un elevato parallelismo) + Akka (modello basato su attori, facile da isolare e ridimensionare l'intero sistema. Fornisce strategie di supervisione). Il paradigma di Akka è strongmente ispirato al sistema modello di attore di Erlang. Per manipolare il DOM sto usando JSOUP, è una libreria completa per gestire l'HTML ed è in grado di eseguire JavaScript. Quindi è bene simulare l'interazione reale con il browser. L'intero stack è basato su JVM.

Questo nuovo stack è estremamente veloce rispetto al primo ed è reattivo e resiliente .

Suggerirei di andare con la seconda soluzione, o se vuoi provare, penso che Erlang sia abbastanza buono da costruire un crawler veloce e un facile parallelismo.

    
risposta data 01.05.2015 - 14:18
fonte