Voglio essere in grado di eseguire il Scrapy web crawling framework da dentro Django. Scrapy fornisce solo uno strumento da riga di comando scrapy
per eseguire i suoi comandi, vale a dire che lo strumento non è stato scritto in modo intenzionale per essere chiamato da un programma esterno.Comando di gestione personalizzato Django in esecuzione Scrapy: come includere le opzioni di Scrapy?
L'utente Mikhail Korobov ha creato uno nice solution, ovvero per chiamare Scrapy da un comando di gestione personalizzato Django. Per comodità, ripeto la sua soluzione qui:
# -*- 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:])
Invece di chiamare ad es. scrapy crawl domain.com
Ora posso fare python manage.py scrapy crawl domain.com
da un progetto Django. Tuttavia, le opzioni di un comando Scrapy non vengono affatto analizzate. Se lo faccio python manage.py scrapy crawl domain.com -o scraped_data.json -t json
, ho solo la seguente risposta:
Usage: manage.py scrapy [options]
manage.py: error: no such option: -o
Quindi la mia domanda è, come estendere il comando di gestione personalizzato per adottare le opzioni della riga di comando di Scrapy?
Sfortunatamente, il numero documentation of this part di Django non è molto esteso. Ho letto anche la documentazione di Python optparse module ma in seguito non è stato più chiaro per me. Qualcuno può aiutarmi in questo senso? Grazie mille in anticipo!
ma non dovremmo essere nella directory principale per eseguire la scansione ?? Come è fatto? @pemistahl – Nabin