follow example python scrapy

example - scrapy python documentation



Forzar mi araña áspera para que deje de gatear (2)

En la última versión de Scrapy, disponible en GitHub, puede generar una excepción CloseSpider para cerrar manualmente una araña.

En la nota de la versión de 0.14 se menciona el documento : "Se agregó la excepción CloseSpider para cerrar manualmente las arañas (r2691)"

Ejemplo según la documentación:

def parse_page(self, response): if ''Bandwidth exceeded'' in response.body: raise CloseSpider(''bandwidth_exceeded'')

Véase también: http://readthedocs.org/docs/scrapy/en/latest/topics/exceptions.html?highlight=closeSpider

¿existe la posibilidad de dejar de rastrear cuando sea específico si la condición es verdadera (como scrap_item_id == predefine_value)? Mi problema es similar a Scrapy: cómo identificar las URL ya raspadas, pero quiero "forzar" a mi araña para que deje de rastrearse después de descubrir el último elemento raspado.


Esta pregunta se hizo hace 8 meses, pero me preguntaba lo mismo y encontré otra solución (no excelente). Esperemos que esto pueda ayudar a los futuros lectores.

Me estoy conectando a una base de datos en mi archivo Pipeline, si la conexión de la base de datos no tiene éxito, quiero que la araña deje de rastrear (no tiene sentido recopilar datos si no hay ningún lugar para enviarlos). Lo que terminé haciendo fue usando:

from scrapy.project import crawler crawler._signal_shutdown(9,0) #Run this if the cnxn fails.

Esto hace que la araña haga lo siguiente:

[scrapy] INFO: Received SIGKILL, shutting down gracefully. Send again to force unclean shutdown.

Acabo de juntar esto después de leer su comentario y revisar el archivo "/usr/local/lib/python2.7/dist-packages/Scrapy-0.12.0.2543-py2.7.egg/scrapy/crawler.py" file . No estoy totalmente seguro de lo que está haciendo, el primer número entregado a la función es el signame (por ejemplo, usando 3.0 en lugar de 9.0 devuelve error [scrapy] INFO: Received SIGKILL...

Aunque parece funcionar bastante bien. Feliz raspado.

EDITAR: Supongo que también podría forzar su programa para que se apague con algo como:

import sys sys.exit("SHUT DOWN EVERYTHING!")