2012-09-14 12 views
5

Sto usando scrapy per scaricare pagine da molti domini diversi in parallelo. Ho centinaia di migliaia di pagine da scaricare, quindi le prestazioni sono importanti.Come posso migliorare la velocità di download di scrapy?

Sfortunatamente, come ho profilato la velocità di scrapy, sto ottenendo solo un paio di pagine al secondo. In realtà, circa 2 pagine al secondo in media. Ho scritto in precedenza i miei ragni multithreading per fare centinaia di pagine al secondo - ho pensato che l'uso di twisty, ecc. Di scrapy sarebbe stato capace di magia simile.

Come si aumenta la velocità? Mi piace molto il framework, ma questo problema di prestazioni potrebbe essere un rompicapo per me.

Ecco la parte pertinente del file settings.py. C'è qualche impostazione importante che ho perso?

LOG_ENABLED = False 
CONCURRENT_REQUESTS = 100 
CONCURRENT_REQUESTS_PER_IP = 8 

alcuni parametri:

  • Uso Scrapy versione 0.14
  • Il progetto viene distribuito su un grande istanza EC2, quindi non ci dovrebbe essere un sacco di memoria, CPU, e la larghezza di banda con cui giocare.
  • Sto pianificando le ricerche per indicizzazione utilizzando il protocollo JSON, mantenendo il crawler aggiornato con alcune dozzine di ricerche per indicizzazione simultanee in qualsiasi momento.
  • Come ho detto all'inizio, sto scaricando pagine da molti siti, quindi le prestazioni del server remoto e CONCURRENT_REQUESTS_PER_IP non dovrebbero essere una preoccupazione.
  • Per il momento, sto facendo pochissima post-elaborazione. No xpath; nessuna regex; Sto solo salvando l'url e alcune statistiche di base per ogni pagina. (Questo cambierà in seguito una volta che ottengo i nodi prestazioni di base elaborati.)
+0

Scrapy è molto più veloce. È collegato alla CPU o sembra inattivo? è lento dall'inizio o le prestazioni peggiorano? –

+0

È lento dall'inizio. AWS mostra che la macchina funziona al 100% della CPU, ma penso che il reattore contorto lo faccia sempre. La macchina è ancora scattante e reattiva ai comandi SSH, nuove richieste HTTP, ecc. – Abe

+1

Lavorando su questo per l'ultima ora, ho il sospetto che il problema sia nei file di configurazione del servizio per scrapyd. Ho iniziato una domanda a parte sul riavvio del demone scrapy: http://stackoverflow.com/questions/12428143/how-do-i-restart-the-scrapyd-daemon – Abe

risposta

9

Ho avuto questo problema in passato ... E gran parte di essa ho risolto con un 'Dirty' vecchio 'complicato.

Do a local cache DNS.

Principalmente quando si utilizza questa elevata CPU per accedere a siti remoti simultanei, è perché scrapy sta cercando di risolvere gli URL.

E ricordarsi di modificare le impostazioni DNS nell'host (/etc/resolv.conf) nel server DNS di cache LOCAL.

Nei primi sarà lento, ma non appena inizierà il caching e sarà più efficiente risolvere i miglioramenti ENORME.

Spero che questo ti possa aiutare nel tuo problema!

+0

ottima risposta !!!! – KJW

+3

Secondo [scrapy doc] (http://doc.scrapy.org/en/latest/topics/settings.html#dnscache-enabled), 'DNSCACHE_ENABLED' è' True' di default. – AliBZ

Problemi correlati