Napisałem pająka za pomocą scrapy, który tworzy całą masę żądań HtmlXPathSelector na osobne witryny. Tworzy wiersz danych w pliku .csv po spełnieniu każdego żądania (asynchronicznie). Niemożliwe jest sprawdzenie, która prośba jest spełniona jako ostatnia, ponieważ żądanie jest powtarzane, jeśli nie wyodrębniono jeszcze danych (czasami kilka razy pomija dane). Mimo że zaczynam od uporządkowanej listy, wynik jest pomieszany, ponieważ wiersze są zapisywane natychmiast po wyodrębnieniu danych.Funkcja Python Scrapy do wywołania tuż przed wysłaniem sygnału spider_closed?
Teraz chciałbym posortować tę listę na podstawie jednej kolumny, ale po każdym żądaniu jest wykonywana. Czy sygnał "spider_closed" może być użyty do aktywacji prawdziwej funkcji? Jak poniżej, próbowałem połączyć sygnał z dyspozytorem, ale ta funkcja wydaje się drukowała tylko rzeczy, zamiast pracować ze zmiennymi, a nawet wywoływać inne funkcje.
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
Myślę, że można dołączyć więcej niż 1 funkcję do sygnału. Czy to rozwiązałoby twój problem? –
Możesz w rzeczywistości połączyć funkcję z sygnałem ... Wierzę, że moim rzeczywistym problemem była struktura "scrapy" - zostało to rozwiązane przez utworzenie pliku .py, który najpierw przechodzi przez pająk, a następnie sortuje plik wyjściowy później. Pomogło to niezmiernie: http://snipplr.com/view/67012/selfcontained-script-to-crawl-a-site-updated-scrapy-130dev/ – corg
Nie powinien dispatcher.connect (...) być w __init __ () zamiast start_requests()? – imwilsonxu