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.)
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? –
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
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