Ho scritto uno spider che utilizza scrapy, uno che fa un sacco di richieste HtmlXPathSelector per separare i siti. Crea una riga di dati in un file .csv dopo che ciascuna richiesta è (in modo asincrono) soddisfatta. È impossibile vedere quale richiesta è soddisfatta per ultimo, perché la richiesta viene ripetuta se non sono stati ancora estratti dati (occasionalmente i dati vengono saltati alcune volte). Anche se inizio con una lista ordinata, l'output è confuso perché le righe vengono scritte immediatamente dopo l'estrazione dei dati.La funzione di Python Scrapy deve essere richiamata appena prima che venga inviato il segnale spider_closed?
Ora mi piacerebbe ordinare quell'elenco in base a una colonna, ma dopo ogni richiesta è fatta. È possibile utilizzare il segnale "spider_closed" per attivare una funzione reale? Come di seguito, ho provato a connettere il segnale con il dispatcher, ma questa funzione sembra stampare solo cose, piuttosto che lavorare con variabili o persino chiamare altre funzioni.
def start_requests(self)
... dispatcher.connect(self.spider_closed, signal=signals.engine_stopped) ....
def spider_closed(spider):
print 'this gets printed alright' # <-only if the next line is omitted...
out = self.AnotherFunction(in) # <-This doesn't seem to run
Penso che sia possibile collegare più di 1 funzione a un segnale. Questo risolverebbe il tuo problema? –
Puoi, infatti, collegare una funzione al segnale ... Credo che il mio vero problema fosse con la struttura di 'scrapy' - questo è stato risolto creando un file .py da eseguire prima attraverso lo spider, quindi ordina il file di output in seguito. Questo ha aiutato immensamente: http://snipplr.com/view/67012/selfcontained-script-to-crawl-a-site-updated-scrapy-130dev/ – corg
Non dovresti dispatcher.connect (...) essere in __init __ () invece di start_requests()? – imwilsonxu