Siteleri ayırmak için bir grup HtmlXPathSelector Requests yapan scrapy kullanarak bir örümcek yazdım. Her istek (asenkronize) memnun olduktan sonra bir .csv dosyasında bir veri satırı oluşturur. En son hangi talebin yerine getirildiğini görmek imkansızdır, çünkü henüz veri alınmadığı takdirde talep tekrarlanır (bazen verileri birkaç kez kaçırır). Düzgün bir listeyle başlasa bile, çıktılar, veri ayıklandıktan hemen sonra satırlar yazıldığından karıştırılır.Python Scrapy işlevi spider_closed sinyali gönderilmeden hemen önce çağrılacak mı?
Şimdi bu listeyi bir sütuna göre sıralamak istiyorum, ancak her istek yapıldıktan sonra. 'spider_closed' sinyali gerçek bir işlevi tetiklemek için kullanılabilir mi? Aşağıda olduğu gibi, sinyali dağıtıcıyla birleştirmeyi denedim, ancak bu işlev değişkenlerle çalışmak yerine ve hatta başka işlevleri çağırmak yerine yalnızca işleri yazdırıyor gibi görünüyor.
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
Sana bir sinyale 1'den fazla işlev eklemeyi düşünüyorum. Bu sorununuzu çözer mi? –
Aslında, bir sinyale bir işlevi bağlayabilirsiniz ... Asıl sorunumun 'scrapy' yapısıyla olduğuna inanıyorum - bu, örümcek ile ilk önce çalıştırmak için bir .py dosyası oluşturarak çözüldü ve sonra daha sonra çıktı dosyası. Bu çok yardımcı oldu: http://snipplr.com/view/67012/selfcontained-script-to-crawl-a-site-updated-scrapy-130dev/ – corg
dispatcher.connect (...) __init __ olması gerekir () start_requests() yerine? – imwilsonxu