美文网首页
scrapy信号(Signals)和数据收集(Stats Col

scrapy信号(Signals)和数据收集(Stats Col

作者: 俊采星驰_87e0 | 来源:发表于2018-06-28 17:50 被阅读0次

信号(Signals)

记录运行时间主要用的的就是scrapy的singal信号管理,点击查看详情

根据各种信号记录数量和时间。

数据收集(Stats Collection)

Scrapy 提供了方便的收集数据的机制。数据以 key/value 方式存储,值大多是计数值。该机制叫做数据收集器(Stats Collector),可以通过 Crawler API 的属性 stats来使用。

无论数据收集(stats collection)开启或者关闭,数据收集器永远都是可用的。因此可以 import 进自己的模块并使用其 API(增加值或者设置新的状态键(stats keys))。该做法是为了简化数据收集的方法:不应该使用超过一行代码来收集你的 spider,Scrapy 扩展或者任何你使用数据收集器代码里头的状态。

数据收集器的另一个特性是(在启用状态下)很高效,(在关闭情况下)非常高效(几乎察觉不到)。

数据收集器对每个 spider 保持一个状态。当 spider 启动时,该表自动打开,当 spider 关闭时,自动关闭。

常见数据收集器使用方法:

通过 stats 属性来使用数据收集器。下面是在扩展中使用的例子:

class ExtensionThatAccessStats(object):

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

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.stats)
#设置数据:
stats.set_value('hostname', socket.gethostname())

#增加数据值:
stats.inc_value('pages_crawled')

#当新的值比原来的值大时设置数据:
stats.max_value('max_items_scraped', value)

#当新的值比原来的值小时设置数据:
stats.min_value('min_free_memory_percent', value)

#获取数据:
>>> stats.get_value('pages_crawled')
8

#获取所有数据:
>>> stats.get_stats()
{'pages_crawled': 1238, 'start_time': datetime.datetime(2009, 7, 14, 21, 47, 28, 977139)}

结合信号使用

import datetime

from scrapy import signals

class CoreStats(object):

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

    @classmethod
    def from_crawler(cls, crawler):
        o = cls(crawler.stats)
        crawler.signals.connect(o.spider_opened, signal=signals.spider_opened)
        crawler.signals.connect(o.spider_closed, signal=signals.spider_closed)
        crawler.signals.connect(o.item_scraped, signal=signals.item_scraped)
        crawler.signals.connect(o.item_dropped, signal=signals.item_dropped)
        crawler.signals.connect(o.response_received, signal=signals.response_received)
        return o

    def spider_opened(self, spider):
        self.stats.set_value('start_time', datetime.datetime.utcnow(), spider=spider)

    def spider_closed(self, spider, reason):
        self.stats.set_value('finish_time', datetime.datetime.utcnow(), spider=spider)
        self.stats.set_value('finish_reason', reason, spider=spider)

    def item_scraped(self, item, spider):
        self.stats.inc_value('item_scraped_count', spider=spider)

    def response_received(self, spider):
        self.stats.inc_value('response_received_count', spider=spider)

    def item_dropped(self, item, spider, exception):
        reason = exception.__class__.__name__
        self.stats.inc_value('item_dropped_count', spider=spider)
        self.stats.inc_value('item_dropped_reasons_count/%s' % reason, spider=spider)

相关文章

  • scrapy信号(Signals)和数据收集(Stats Col

    信号(Signals) 记录运行时间主要用的的就是scrapy的singal信号管理,点击查看详情 根据各种信号记...

  • scrapy 数据收集stats collection

    Scrapy提供了一种方便的工具,用于以键/值的形式收集统计数据,其中值通常是计数器。 该工具称为统计收集器.统计...

  • scrapy信号signals

    Scrapy广泛使用信号来通知特定事件发生的时间。 可以在Scrapy项目中捕获一些这些信号(例如,使用扩展名)来...

  • scrapy 爬虫

    scrapy 官方文档 scrapy的信号量文档使用 scrapy的扩展文档使用 scrapy统计数据收集 安装:...

  • R第十二天

    数据可视化 一、箱线图 boxplot(数据集的变量)——col调颜色 变量~变量 boxplot.stats()...

  • Flask Signals详解

    Flask Signals简介 Flask Signals和操作系统的signals系统很类似,都是通过信号(也可...

  • 4、scrapy内置服务

    本篇介绍scrapy的Logging模块、Stats Collections模块和Sending-email模块。...

  • pyqt5——事件和信号

    事件和信号 事件 signals and slots 被其他人翻译成信号和槽机制,(⊙o⊙)…我这里还是不翻译好了...

  • 爬虫周末总结

    scrapy engine:负责spider,ltenepipeline中间通讯,信号数据传递scheduler:...

  • shell脚本获取docker stats数据并添加时间

    使用脚本获取实现docker stats数据收集,并在每行前面增加上采集数据是时间,方便分析及制作图表

网友评论

      本文标题:scrapy信号(Signals)和数据收集(Stats Col

      本文链接:https://www.haomeiwen.com/subject/ibknyftx.html