python - follow - ¿Cómo construir un rastreador web basado en Scrapy para que funcione para siempre?
scrapy follow (2)
Quiero construir un rastreador web basado en Scrapy para capturar imágenes de noticias de varios sitios web del portal de noticias. Quiero que este rastreador sea:
Corre para siempre
Significa que volverá a visitar periódicamente algunas páginas del portal para obtener actualizaciones.
Programar prioridades.
Da diferentes prioridades a diferentes tipos de URL.
Buscar hilo múltiple
He leído el documento de Scrapy pero no he encontrado algo relacionado con lo que enumeré (tal vez no soy lo suficientemente cuidadoso). ¿Hay alguien aquí que sepa cómo hacer eso? o simplemente da una idea / ejemplo al respecto. ¡Gracias!
Scrapy es un marco para la exploración de sitios web, como tal, está destinado a respaldar sus criterios, pero no lo va a bailar para usted de la caja; es probable que deba familiarizarse relativamente con el módulo para algunas tareas.
- Correr para siempre depende de su aplicación que llame a Scrapy. Les dices a las arañas a dónde ir y cuándo ir allí.
- Dar prioridades es el trabajo del middleware de Scheduler que debe crear y conectar a Scrapy. La documentación sobre esto parece irregular y no he mirado el código; en principio, la función está ahí.
- La depuración es inherentemente, fundamentalmente asíncrona, que bien puede ser lo que usted desea: la solicitud B puede satisfacerse mientras la solicitud A aún está pendiente. El motor de conexión subyacente no le impide realizar múltiples subprocesos de buena fe , pero Scrapy no proporciona servicios de subprocesamiento.
Scrapy es una biblioteca, no una aplicación. Existe una cantidad de trabajo no trivial (código) que un usuario del módulo debe realizar.
Sobre el requisito de correr, para siempre, aquí hay algunos detalles.
Necesita capturar la señal signals.spider_idle
, y en su método que está conectado a la señal, debe generar una excepción DontCloseSpider
. La señal spider_idle
se envía al motor de scrapy cuando no hay solicitudes pendientes, y por defecto la araña se apagará. Usted puede interceptar este proceso.
Ver códigos de golpe:
import scrapy
from scrapy.exceptions import DontCloseSpider
from scrapy.xlib.pydispatch import dispatcher
class FooSpider(scrapy.Spider):
def __init__(self, *args, **kwargs):
super(FooSpider, self).__init__(*args, **kwargs)
dispatcher.connect(self.spider_idle, signals.spider_idle)
def spider_idle(self):
#you can revisit your portal urls in this method
raise DontCloseSpider