码迷,mamicode.com
首页 > 其他好文 > 详细

scrapy专题(五):自定义扩展

时间:2020-04-05 20:45:34      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:mail   enabled   info   otc   console   子邮件   中间   rest   默认   

通过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: 邮件接收地址

scrapy专题(五):自定义扩展

标签:mail   enabled   info   otc   console   子邮件   中间   rest   默认   

原文地址:https://www.cnblogs.com/qiu-hua/p/12638732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!