2010-02-28 16 views
11

Quiero construir un rastreador web basado en Scrapy para capturar imágenes de noticias de varios sitios web del portal de noticias. Quiero este rastreador ser:¿Cómo construir un rastreador web basado en Scrapy para que funcione para siempre?

  1. Ejecutar siempre

    significa que será la publicación periódica volver a visitar algunas páginas del portal para obtener actualizaciones.

  2. Programar las prioridades.

    Asigne diferentes prioridades a diferentes tipos de URL.

  3. Tema Multi traiga

He leído el documento Scrapy pero no he encontrado algo relacionado con lo que hice una lista (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!

Respuesta

12

Scrapy es un marco para el rastreo 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.

  1. Correr para siempre depende de su aplicación que llame a Scrapy. Usted le dice al the spiders dónde ir y cuándo ir allí.
  2. Dar prioridad es el trabajo de Scheduler middleware 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í.
  3. Scrapy es inherentemente, fundamentally asynchronous que bien puede ser lo que está buscando: la solicitud B puede cumplirse mientras la solicitud A todavía está pendiente. El motor de conexión subyacente no le impide bona fide multi-threading, 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.

+0

Gracias! Según tengo entendido, las arañas parecen funcionar para trabajos "de una sola vez" (simplemente rastree todo lo especificado y salga). Entonces, ¿quieres decir si quiero un rastreador de larga duración? Debería escribir la aplicación yo mismo y llamar a araña para que haga el trabajo. No es fácil implementar la lógica de larga duración dentro de Scrapy mediante middleware u otra cosa, ¿verdad? – superb

+0

Probablemente podría implementar la lógica re-spider en la capa de Spider Middleware, pero las primitivas no parecen adecuadas para eso y mi intuición es que estaría presionando la lógica de la capa de aplicación hacia abajo en el nivel de presentación (si puedo permitido hacer un uso incorrecto de la terminología OSI). http://doc.scrapy.org/topics/spider-middleware.html – msw

+0

El enlace de middleware del programador, que ha proporcionado, no está funcionando ahora. –

0

Acerca del requisito de ejecución para siempre, aquí hay algunos detalles.

Necesita capturar la señal signals.spider_idle, y en su método que conectado a la señal, necesita 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 los códigos soplan:

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 
Cuestiones relacionadas