gpt4 book ai didi

python - Scrapy Spider - 通过 Stats Collection 保存数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:13 25 4
gpt4 key购买 nike

我试图在上次运行的蜘蛛和当前蜘蛛之间保存一些信息。为了使这成为可能,我找到了 Stats Collection由 scrapy 支持。我的代码如下:

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 上运行它,您可以使用他们的 collections api

最佳答案

您需要以一种或另一种方式(在文件或数据库中)将此数据保存到磁盘。

您写入数据的爬虫对象仅在您执行爬网期间存在。一旦您的爬虫完成,该对象就会留下内存,您就会丢失数据。

我建议在 init 中加载上次运行的统计数据。然后像你一样在解析中更新它们。然后连接 scrapy spider_closed 信号以在蜘蛛完成运行时保留数据。

如果您需要 spider_closed 的示例,请告诉我,我会更新。但是网上有很多例子。

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

关于python - Scrapy Spider - 通过 Stats Collection 保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com