zg 매뉴얼의 scrapy 개발 (6) - extensions (확장) 개발

scrapy 확장
확장은 사용자 정의 기능을 scrapy에 추가하는 메커니즘을 제공합니다
예를 들어 파충류의 상태 통계가 확장되고 파충류의 운행 정보를 통계한다
로드 및 실행
scrapy가 시작될 때 확장된 단일 실례 대상을 만들고 확장된 설정을 settings에 추가합니다.py 파일
#              ,          ,          
EXTENSIONS = {
    'scrapy.contrib.corestats.CoreStats': 500,
    'scrapy.webservice.WebService': 500,
    'scrapy.telnet.TelnetConsole': 500,}
#     
MYEXT_ENABLED = True

공식 플러그인 예
  • from_crawler는 플러그인 (다운로드 플러그인, 확장 플러그인 등) 을 만들 때 프레임워크에 호출되는 방법입니다.설정을 검사하고 설정 정보를 전달할 수 있습니다 (crawler.settings 대상에서 settings.py에 정의된 설정 정보를 얻을 수 있습니다)
  • crawler를 호출합니다.signals.connect 등록 이벤트 리셋 함수, 이벤트 발생 시 프레임워크 리셋
  • from scrapy import signals
    from scrapy.exceptions import NotConfigured
    
    class SpiderOpenCloseLogging(object):
    
        def __init__(self, item_count):
            self.item_count = item_count
            self.items_scraped = 0
    
        @classmethod
        def from_crawler(cls, crawler):
            #         ,       ,     NotConfigured
            if not crawler.settings.getbool('MYEXT_ENABLED'):
                raise NotConfigured
    
            #       settings.py     
            item_count = crawler.settings.getint('MYEXT_ITEMCOUNT', 1000)
    
            #         
            ext = cls(item_count)
    
            #    spider     
            crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened)
    
            #    spider     
            crawler.signals.connect(ext.spider_closed, signal=signals.spider_closed)
    
            #    item     (       )
            crawler.signals.connect(ext.item_scraped, signal=signals.item_scraped)
    
            #       
            return ext
    
        def spider_opened(self, spider):
            spider.log("opened spider %s" % spider.name)
    
        def spider_closed(self, spider):
            spider.log("closed spider %s" % spider.name)
    
        def item_scraped(self, item, spider):
            self.items_scraped += 1
            if self.items_scraped == self.item_count:
                spider.log("scraped %d items, resetting counter" % self.items_scraped)
                self.item_count = 0

    텍스트 링크:http://www.hopez.org/blog/9/1396850810

    좋은 웹페이지 즐겨찾기