2011-10-14 17 views
13

he empezado a utilizar Scrapy para raspar unos pocos sitios web. Si posteriormente añade un nuevo campo al modelo o cambio mis funciones de análisis, me gustaría ser capaz de "reproducir" la conexión de datos en bruto descargado para raspar de nuevo. Parece que Scrapy tenía la capacidad de almacenar datos en bruto en un archivo de reproducción en un momento dado:Repetir una araña Scrapy en los datos almacenados

http://dev.scrapy.org/browser/scrapy/trunk/scrapy/command/commands/replay.py?rev=168

Pero esta funcionalidad parece haber sido eliminado en la versión actual de Scrapy. ¿Hay alguna otra manera de lograr esto?

+1

¿trató de preguntar en el ML? Se siente injusta conmigo si te pido tu pregunta allí y sólo pegar la respuesta: P – naeg

+1

Si usted tiene una solución a mi problema, que está bien para mí - sólo haga referencia a su fuente;) – del

Respuesta

18

Si ejecuta crawl --record=[cache.file] [scraper], podrás luego usar replay [scraper].

Alternativamente, se puede almacenar en caché todas las respuestas con el HttpCacheMiddleware incluyéndolo en DOWNLOADER_MIDDLEWARES:

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 300, 
} 

Si hace esto, cada vez que se ejecuta el raspador, se comprobará el sistema de archivos en primer lugar.

+0

Probé 'scrapy rastreo --record = mycache myspider' y obtuvo el mensaje de error "crawl: error: no hay tal opción: --record". Estoy usando Scrapy 0.12.0.2548. El uso de HttpCacheMiddleware no funcionará, ya que haré múltiples solicitudes idénticas a lo largo del tiempo que devolverán respuestas diferentes. – del

3

Puede activar HTTPCACHE_ENABLED como se ha dicho http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html?highlight=FilesystemCacheStorage#httpcache-enabled

para almacenar en caché todas las solicitudes HTTP y la respuesta a implementar hoja de vida arrastrándose.

o tratar de Trabajo para una pausa y reanudar el rastreo http://scrapy.readthedocs.org/en/latest/topics/jobs.html

+0

Esto no funcionará si quiero realizar solicitudes idénticas en el tiempo que devolverá diferentes respuestas. Por ejemplo, ¿qué pasa si quiero robar la página principal de slashdot.org cada hora? No puedo reproducir esto, ya que la entrada en caché se sobrescribirá cada hora. – del

Cuestiones relacionadas