Comando de administración personalizado de Django que ejecuta Scrapy: ¿Cómo incluir las opciones de Scrapy?
Quiero ser capaz de ejecutar elScrapy web crawling framework desde dentro de Django. Scrapy en sí solo proporciona una herramienta de línea de comandosscrapy
para ejecutar sus comandos, es decir, la herramienta no fue escrita intencionalmente para ser llamada desde un programa externo.
El usuarioMikhail Korobov se le ocurrió unabuena solución, es decir, llamar a Scrapy desde un comando de administración personalizado de Django. Por conveniencia, repito su solución aquí:
<code># -*- coding: utf-8 -*- # myapp/management/commands/scrapy.py from __future__ import absolute_import from django.core.management.base import BaseCommand class Command(BaseCommand): def run_from_argv(self, argv): self._argv = argv return super(Command, self).run_from_argv(argv) def handle(self, *args, **options): from scrapy.cmdline import execute execute(self._argv[1:]) </code>
En lugar de llamar por ejemploscrapy crawl domain.com
Ahora puedo hacerpython manage.py scrapy crawl domain.com
desde dentro de un proyecto de Django. Sin embargo, las opciones de un comando de Scrapy no se analizan en absoluto. Si lo hagopython manage.py scrapy crawl domain.com -o scraped_data.json -t json
, Solo obtengo la siguiente respuesta:
<code>Usage: manage.py scrapy [options] manage.py: error: no such option: -o </code>
Entonces, mi pregunta es, ¿cómo extender el comando de administración personalizado para adoptar las opciones de línea de comandos de Scrapy?
Desafortunadamente, Django'sdocumentación de esta parte No es muy extenso. También he leído la documentación de Python.módulo optparse Pero después no me quedó más claro. ¿Alguien puede ayudarme en este sentido? ¡Muchas gracias por adelantado!