2011-07-29 13 views
6

Estoy tratando de crear una aplicación Django que funcione como una especie de tienda. Los elementos se eliminan de Internet y actualizan la base de datos del proyecto Django de forma continua a lo largo del tiempo (por ejemplo, cada dos o tres días). Estoy usando el marco de Scrapy para realizar raspado, y aunque hay un DjangoItem feature experimental, preferiría mantenerme alejado de él porque es inestable.¿Cuál es la mejor forma de exportar continuamente información de un rastreador de Scrapy a una base de datos de aplicaciones de Django?

En este momento mi plan es la creación de archivos XML de elementos rastreados con XMLItemExporter (docs) here de Scrapy, y las usará para loaddata en el proyecto de Django como accesorios XML (docs here). Esto parece estar bien porque si uno de los dos procesos se estropea, hay un intermediario de archivo entre ellos. La modularización de la aplicación como un todo tampoco parece una mala idea.

Algunas de las preocupaciones son:

  • que estos archivos pueden ser demasiado grandes para leer en la memoria para Django loaddata.
  • Estoy gastando demasiado tiempo en esto cuando podría haber una solución mejor o más fácil, como exportar directamente a la base de datos, que es MySQL en este caso.
  • Parece que nadie ha escrito sobre este proceso en línea, lo cual es extraño teniendo en cuenta que, en mi opinión, Scrapy es un marco excelente para conectarlo a una aplicación de Django.
  • No existe una guía definitiva para la creación manual de accesorios Django en los documentos de Django; parece que está más orientada hacia el volcado y la recarga de dispositivos de la propia aplicación.

La existencia del DjangoItem experimental sugiere que Scrapy + Django es una opción bastante popular para que haya una buena solución aquí.

Agradecería mucho cualquier solución, consejo o sabiduría sobre este asunto.

Respuesta

1

Esta pregunta es un poco viejo ya, pero actualmente estoy tratando con una adecuada integración de Django + Scrapy también. Mi flujo de trabajo es el siguiente: he configurado Scrapy como un comando de administración de Django como se describe en in this answer. Luego, simplemente escribo una canalización de Scrapy que guarda un ítem raspado en la base de datos de Django usando los métodos QuerySet de Django. Eso es todo. Actualmente estoy usando SQLite para la base de datos y funciona como un encanto. Quizás esto aún sea útil para alguien.

1

Puede usar django-dynamic-scraper para crear y administrar raspadores Scrapy con fácil acceso a los modelos Django. Hasta ahora no me he encontrado con ningún problema que no pueda resolver que Scrapy no pueda resolver.

Django-dynamic-scraper documentation

Cuestiones relacionadas