ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-04-05 19:51:12  阅读:275  来源: 互联网

标签:专题 自定义 扩展 spider 爬虫 item scrapy extensions


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

标签:专题,自定义,扩展,spider,爬虫,item,scrapy,extensions
来源: https://www.cnblogs.com/qiu-hua/p/12638732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有