2012-09-14 20 views
5

Estoy usando scrapy para descargar páginas de muchos dominios diferentes en paralelo. Tengo cientos de miles de páginas para descargar, por lo que el rendimiento es importante.¿Cómo puedo mejorar la velocidad de descarga de scrapy?

Desafortunadamente, como he perfilado la velocidad de scrapy, solo estoy obteniendo un par de páginas por segundo. Realmente, aproximadamente 2 páginas por segundo en promedio. Anteriormente escribí mis propias arañas multiproceso para hacer cientos de páginas por segundo, y pensé con seguridad que el uso de torcido por parte de Scrapy, etc., sería capaz de una magia similar.

¿Cómo acelero el tratamiento? Realmente me gusta el marco, pero este problema de rendimiento podría ser un factor decisivo para mí.

Aquí está la parte relevante del archivo settings.py. ¿Hay alguna configuración importante que me he perdido?

LOG_ENABLED = False 
CONCURRENT_REQUESTS = 100 
CONCURRENT_REQUESTS_PER_IP = 8 

Unos parámetros:

  • Uso scrapy versión 0.14
  • El proyecto se implementa en una gran instancia EC2, por lo que no debería haber un montón de memoria, CPU y ancho de banda para jugar.
  • Estoy programando rastreos mediante el protocolo JSON, manteniendo el rastreador con algunas docenas de rastreos simultáneos en un momento dado.
  • Como dije al principio, estoy descargando páginas de muchos sitios, por lo que el rendimiento del servidor remoto y CONCURRENT_REQUESTS_PER_IP no deberían ser una preocupación.
  • Por el momento, estoy haciendo muy poco post-procesamiento. Sin xpath; sin expresiones regulares; Solo estoy guardando la url y algunas estadísticas básicas para cada página. (Esto va a cambiar más adelante una vez que consiga los dobleces básicos de rendimiento elaboradas.)
+0

El tratamiento con Scrapy es mucho más rápido. ¿Está vinculado a la CPU o parece inactivo? ¿es lento desde el principio o el rendimiento se degrada? –

+0

Es lento desde el principio. AWS muestra que la máquina funciona al 100% de la CPU, pero creo que el reactor retorcido siempre hace eso. La máquina sigue siendo ágil y sensible a los comandos SSH, nuevas solicitudes HTTP, etc. – Abe

+1

Trabajando en esto durante la última hora, tengo la corazonada de que el problema está en los archivos de configuración del servicio para scrapyd. Empecé una pregunta por separado sobre el reinicio del daemon de scrapy: http://stackoverflow.com/questions/12428143/how-do-i-restart-the-scrapyd-daemon – Abe

Respuesta

9

he tenido este problema en el pasado ... Y gran parte de ella he resuelto con un 'sucio' vieja complicado.

Do a local cache DNS.

Principalmente cuando tienes este alto uso de la CPU al acceder a sitios remotos simultáneos es porque scrapy está tratando de resolver las URL.

Y recuerde cambiar la configuración de su DNS en el host (/etc/resolv.conf) a su servidor DNS de almacenamiento en caché LOCAL.

En los primeros será lento, pero tan pronto comience a almacenar en caché y sea más eficiente resolverlo, verá enormes mejoras.

¡Espero que esto lo ayude en su problema!

+0

¡¡excelente respuesta !!!! – KJW

+3

Según [scrapy doc] (http://doc.scrapy.org/en/latest/topics/settings.html#dnscache- habilitado), 'DNSCACHE_ENABLED' es' True' de forma predeterminada. – AliBZ

Cuestiones relacionadas