我有一隻需要找到產品價格的蜘蛛。這些產品成批地分組在一起(來自數據庫),並且具有批處理狀態(RUNNING,DONE)以及start_time
和finished_time
屬性會很好。 所以我有這樣的:Scrapy:等待一些網址被解析,然後做點什麼
class PriceSpider(scrapy.Spider):
name = 'prices'
def start_requests(self):
for batch in Batches.objects.all():
batch.started_on = datetime.now()
batch.status = 'RUNNING'
batch.save()
for prod in batch.get_products():
yield scrapy.Request(product.get_scrape_url(), meta={'prod': prod})
batch.status = 'DONE'
batch.finished_on = datetime.now()
batch.save() # <-- NOT COOL: This is goind to
# execute before the last product
# url is scraped, right?
def parse(self, response):
#...
這裏的問題是由於scrapy的異步性質,批次對象的第二狀態更新將會太快運行,對吧? 有沒有辦法將這些請求以某種方式組合在一起,並在最後一個被分析時更新批處理對象?
有趣的是,我看到這些信號可能是有用的。 在這種情況下,雖然可能「關閉」不是正確的(因爲蜘蛛會處理多個批次,理想情況下我想知道每個批次的完成時間) –