Scrapy Spider语言 - 通过统计收集保存数据



我试图保存上次运行的蜘蛛和当前蜘蛛之间的一些信息。为了实现这一目标,我找到了由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

EDIT:如果你在Scrapinghub上运行它,你可以使用他们的集合api

您需要以某种方式(在文件或数据库中)将这些数据保存到磁盘上。

要写入数据的爬虫对象仅在执行爬虫期间存在。一旦你的蜘蛛完成任务,对象就会离开内存,你的数据就丢失了。

我建议在init中加载上次运行的统计数据。然后在解析中更新它们。然后连接scrapy spider_closed信号,以便在蜘蛛完成运行时持久化数据。

如果你需要一个spider_closed的例子,让我知道,我会更新。但是在网络上有很多现成的例子。

编辑:我给你举个例子:https://stackoverflow.com/a/12394371/2368836

最新更新