classQianlongwangSpiderMiddleware(object):# Not all methods need to be defined. If a method is not defined,# scrapy acts as if the spider middleware does not modify the# passed objects.@classmethoddeffrom_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)crawler.signals.connect(s.item_scraped, signal=signals.item_scraped)crawler.signals.connect(s.spider_closed, signal=signals.spider_closed)crawler.signals.connect(s.spider_error, signal=signals.spider_error)crawler.signals.connect(s.spider_idle, signal=signals.spider_idle)return s# 當(dāng)spider開始爬取時發(fā)送該信號。該信號一般用來分配spider的資源,不過其也能做任何事。defspider_opened(self, spider):spider.logger.info('pa chong kai shi le: %s' % spider.name)print('start','1')defitem_scraped(self,item, response, spider):global hahahahahaha += 1# 當(dāng)某個spider被關(guān)閉時,該信號被發(fā)送。該信號可以用來釋放每個spider在 spider_opened 時占用的資源。defspider_closed(self,spider, reason):print('-------------------------------all over------------------------------------------')global hahahaprnit(spider.name,' closed')# 當(dāng)spider的回調(diào)函數(shù)產(chǎn)生錯誤時(例如,拋出異常),該信號被發(fā)送。defspider_error(self,failure, response, spider):code = response.statusprint('spider error')# 當(dāng)spider進(jìn)入空閑(idle)狀態(tài)時該信號被發(fā)送。空閑意味著:# requests正在等待被下載# requests被調(diào)度# items正在item pipeline中被處理defspider_idle(self,spider):for i in range(10):print(spider.name)