簡體   English   中英

Scrapy Spider - 通過Stats Collection保存數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM