Scrapy:如何将爬虫统计信息保存为JSON文件?

3

在Scrapy 2.0.1中,我正在将新数据写入JSON文件。在进程结束时,我想要添加Scrapy统计信息。现在我知道有一个可用的Scrapy统计集合:

https://docs.scrapy.org/en/latest/topics/stats.html

因此,正确的代码行可能是:stats.get_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文件中?


你应该能够在你的管道中使用 from_crawler - Gallaecio
@Gallaecio,您能否进一步解释一下?我已经在close_spider方法中添加了print(self.stats.get_stats()),但没有任何效果。 - merlin
你应该能够将你的问题的 __init__from_crawler 方法添加到你的管道类中,从而使 self.stats 可用。 - Gallaecio
嘿,你最终成功将统计数据导出为JSON了吗? - Jack
@merlin 你好,你最终是否成功将统计数据导出为json格式了呢? - Sardar
1个回答

3
您可以使用一个运行在运行结束时的状态收集器。
将其添加到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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接