笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

扩展

发布者: 笨鸟自学网



编写自己的扩展名

每个扩展都是一个Python类。碎屑扩展(也包括中间产品和管道)的主要入口点是 from_crawler 类方法,它接收 Crawler 实例。通过爬虫对象,您可以访问设置、信号、统计信息,还可以控制爬行行为。

通常,扩展连接到 signals 并执行由它们触发的任务。

最后,如果 from_crawler 方法引发 NotConfigured 异常,扩展将被禁用。否则,将启用扩展。

样本扩展

在这里,我们将实现一个简单的扩展来说明前一节中描述的概念。此扩展将每次记录一条消息:

  • 蜘蛛被打开了

  • 蜘蛛被关闭了

  • 特定数量的物品被爬取

扩展将通过 MYEXT_ENABLED 设置和项目数将通过 MYEXT_ITEMCOUNT 设置。

这是这种扩展的代码:

import logging
from scrapy import signals
from scrapy.exceptions import NotConfigured

logger = logging.getLogger(__name__)

class SpiderOpenCloseLogging:

    def __init__(self, item_count):
        self.item_count = item_count
        self.items_scraped = 0

    @classmethod
    def from_crawler(cls, crawler):
        # first check if the extension should be enabled and raise
        # NotConfigured otherwise
        if not crawler.settings.getbool('MYEXT_ENABLED'):
            raise NotConfigured

        # get the number of items from settings
        item_count = crawler.settings.getint('MYEXT_ITEMCOUNT', 1000)

        # instantiate the extension object
        ext = cls(item_count)

        # 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):
        logger.info("opened spider %s", spider.name)

    def spider_closed(self, spider):
        logger.info("closed spider %s", spider.name)

    def item_scraped(self, item, spider):
        self.items_scraped += 1
        if self.items_scraped % self.item_count == 0:
            logger.info("scraped %d items", self.items_scraped) 

上一篇:蜘蛛中间件下一篇:核心API

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-11-23 18:15 , Processed in 0.028059 second(s), 17 queries .

© 2001-2020

返回顶部