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# 當spider開始爬取時發送該信號。該信號一般用來分配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# 當某個spider被關閉時,該信號被發送。該信號可以用來釋放每個spider在 spider_opened 時占用的資源。defspider_closed(self,spider, reason):print('-------------------------------all over------------------------------------------')global hahahaprnit(spider.name,' closed')# 當spider的回調函數產生錯誤時(例如,拋出異常),該信號被發送。defspider_error(self,failure, response, spider):code = response.statusprint('spider error')# 當spider進入空閑(idle)狀態時該信號被發送。空閑意味著:# requests正在等待被下載# requests被調度# items正在item pipeline中被處理defspider_idle(self,spider):for i in range(10):print(spider.name)