zoukankan      html  css  js  c++  java
  • scrapy 基础组件专题(五):自定义扩展

    通过scrapy提供的扩展功能, 我们可以编写一些自定义的功能, 插入到scrapy的机制中

    一、编写一个简单的扩展

    我们现在编写一个扩展, 统计一共获取到的item的条数
    我们可以新建一个extensions.py

    # extendsions.py
    # -*- coding: utf-8-*-
    from scrapy import signals
    from scrapy.exceptions import NotConfigured
    
    class StatsItemCount(object):
        def __init__(self):
            self.item_count = 0
    
        @classmethod
        def from_crawler(cls, crawler):
            # instantiate the extension object
            ext = cls()
    
            # connect the extension object to signals
            crawler.signals.connect(ext.spider_opened,
                                    signal=signals.spider_opened)
            crawler.signals.connect(ext.spider_closed,
                                    signal=signals.spider_closed)
            crawler.signals.connect(ext.item_scraped, signal=signals.item_scraped)
    
            # return the extension object
            return ext
    
        def spider_opened(self, spider):
            spider.logger.info("-----------opened spider %s", spider.name)
    
        def spider_closed(self, spider):
            spider.logger.info("------------closed spider %s", spider.name)
            spider.logger.info("一共获取到{}条数据".format(self.item_count))
    
        def item_scraped(self, item, spider):
            self.item_count += 1
    1. from_crawler方法中注册信号
    2. 编写item_scraped方法, 统计所有解析出来的item
    3. spider_closed中输出抓取到的数据

    开启扩展:

    # settings.py
    EXTENSIONS = {
       'ccidcom.extensions.StatsItemCount': 999,
    }

    运行爬虫
    scrapy crawl ccidcomSpider

    ...
    2019-11-21 16:53:23 [ccidcomSpider] INFO: -----------opened spider ccidcomSpider
    2019-11-21 16:53:23 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
    2019-11-21 16:53:23 [scrapy.core.engine] INFO: Closing spider (finished)
    2019-11-21 16:53:23 [ccidcomSpider] INFO: ------------closed spider ccidcomSpider
    2019-11-21 16:53:23 [ccidcomSpider] INFO: 一共获取到10条数据
    ...

    很明显可以看出来, 编写扩展而不是在spider、中间件中编写, 整个项目更加的不乱, 可扩展性好

    二、scrapy内置的扩展

    1. 统计信息记录扩展

    scrapy.extensions.logstats.LogStats
    记录统计信息

    2. 核心信息统计扩展

    scrapy.extensions.corestats.CoreStats
    核心统计信息统计, 必须开启LogStats,这个扩展才有效

    3. telnet调试扩展

    scrapy.extensions.telnet.TelnetConsole
    提供telnet调试爬虫, 这个在之后的调试爬虫会详细讲

    4. 内存使用监控扩展

    scrapy.extensions.memusage.MemoryUsage
    内存使用监控扩展, 这个扩展不支持windows

    1. 当蜘蛛超过某个值时关闭蜘蛛
    2. 超过某个值时发送通知电子邮件

    配置值:
    MEMUSAGE_LIMIT_MB: 限制爬虫大小, 达到则关闭爬虫
    MEMUSAGE_WARNING_MB: 警告内存大小, 达到这个峰值则发送邮件
    MEMUSAGE_NOTIFY_MAIL: 通知邮件地址
    MEMUSAGE_CHECK_INTERVAL_SECONDS: 检测间隔, 单位秒

    5. 内存调试扩展

    scrapy.extensions.memdebug.MemoryDebugger
    这个扩展收集以下信息:

    1. python垃圾收集器未收集的对象
    2. 其他不应该保留的对象

    配置项:
    MEMDEBUG_ENABLED: 开启后内存信息会记录在统计信息中

    6. 自动关闭蜘蛛扩展

    scrapy.extensions.closespider.CloseSpider
    达到指定条件则关闭爬虫

    配置项:
    CLOSESPIDER_TIMEOUT: 蜘蛛运行达到一定时间则自动关闭, 默认0, 不关闭
    CLOSESPIDER_ITEMCOUNT: 爬虫抓取的item达到指定的数量, 则关闭爬虫, 默认是0, 不关闭
    CLOSESPIDER_PAGECOUNT: 爬虫爬取页数, 达到指定数则关闭, 默认是0, 不关闭
    CLOSESPIDER_ERRORCOUNT: 如果爬虫运行期间发生的错误达到一定数量, 则关闭爬虫, 默认是0, 不关闭

    7. StatsMailer扩展

    scrapy.extensions.statsmailer.StatsMailer
    在抓取完成后发送邮件、包括收集到的统计信息

    配置项:
    STATSMAILER_RCPTS: 邮件接收地址

  • 相关阅读:
    js 获得多个同name 的input输入框的值
    推荐系统
    异常检测
    降维——PCA主成分分析
    无监督学习——降维
    无监督学习——K-means聚类
    支持向量机——内核
    支持向量机背后的数学
    支持向量机——Large Margin Classifier
    支持向量机
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12638732.html
Copyright © 2011-2022 走看看