Python Scrapy:如何将爬行统计信息保存到json文件?

Python Scrapy:如何将爬行统计信息保存到json文件?,python,scrapy,Python,Scrapy,在scrapy 2.0.1中,我将新数据写入json文件。在这个过程的最后,我想附加一些零碎的统计数据。现在我知道有一个scrapy stats集合可用: 因此,正确的代码行可能是:stats.get\u stats() 结合: class ExtensionThatAccessStats(object): def __init__(self, stats): self.stats = stats @classmethod def from_craw

在scrapy 2.0.1中,我将新数据写入json文件。在这个过程的最后,我想附加一些零碎的统计数据。现在我知道有一个scrapy stats集合可用:

因此,正确的代码行可能是:
stats.get\u stats()

结合:

class ExtensionThatAccessStats(object):

    def __init__(self, stats):
        self.stats = stats

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.stats)
我当前的管道如下所示:

class test_pipeline(object):

    file = None

    def open_spider(self, spider):
        self.file = open('data/test.json', 'wb')
        self.exporter = JsonItemExporter(self.file)
        self.exporter.start_exporting()

    def close_spider(self, spider):
        self.exporter.finish_exporting()
        self.file.close()

我是Python新手。如何添加此功能以将统计信息附加到json文件?

您可以使用在运行结束时运行的统计信息收集器

将其添加到settings.py:

STATS_CLASS = 'mycrawler.MyStatsCollector.MyStatsCollector'
下面是MyStatsCollector.py的一个基本实现,它将JSON输出到一个文件:

from scrapy.statscollectors import StatsCollector
from scrapy.utils.serialize import ScrapyJSONEncoder

class MyStatsCollector(StatsCollector):
    def _persist_stats(self, stats, spider):
        encoder = ScrapyJSONEncoder()
        with open("stats.json", "w") as file:
            data = encoder.encode(stats)
            file.write(data)

您应该能够在管道中使用来自爬虫的
。@Gallaecio您能进一步解释一下吗?我添加了close_spider方法:print(self.stats.get_stats()),但没有任何效果。您应该能够将问题的
\uuu init\uuuu
从\u crawler
方法添加到管道类中,从而使
self.stats
可用。嘿,您曾经成功地将统计导出到json吗?