[英]Scrapy Spider - Saving data through Stats Collection
我試圖在最后運行的蜘蛛和當前的蜘蛛之間保存一些信息。 為了實現這一目標,我發現scrapy支持Stats Collection 。 我的代碼如下:
class StatsSpider(Spider):
name = 'stats'
def __init__(self, crawler, *args, **kwargs):
Spider.__init__(self, *args, **kwargs)
self.crawler = crawler
print self.crawler.stats.get_value('last_visited_url')
@classmethod
def from_crawler(cls, crawler):
return cls(crawler)
def start_requests(self):
return [Request(url)
for url in ['http://www.google.com', 'http://www.yahoo.com']]
def parse(self, response):
self.crawler.stats.set_value('last_visited_url', response.url)
print'URL: %s' % response.url
當我運行我的蜘蛛時,我可以通過調試看到stats變量正在使用新數據刷新,但是,當我再次(本地)運行我的蜘蛛時,stats變量開始為空。 我應該怎樣運行我的蜘蛛以保持數據?
我在控制台上運行它:
scrapy runspider stats.py
編輯:如果您在Scrapinghub上運行它,您可以使用他們的集合api
您需要以這種或那種方式(在文件或數據庫中)將此數據保存到磁盤。
寫入數據的爬網程序對象僅在執行爬網期間存在。 一旦您的蜘蛛完成該對象離開內存並且您丟失了數據。
我建議加載你上次在init中運行的統計數據。 然后像你一樣在解析中更新它們。 然后連接scrapy spider_closed信號以在蜘蛛完成運行時持久保存數據。
如果你需要一個spider_closed的例子讓我知道,我會更新。 但是很多例子都可以在網上找到。
編輯:我只想舉個例子: https : //stackoverflow.com/a/12394371/2368836
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.