Skip to main content
 首页 » 编程设计

python之如何停止 scrapy 爬虫

2025年05月04日56Leo_wl

如果满足某些条件,我想停止蜘蛛 我试过这样做: raise CloseSpider('Some Text') 和

sys.exit("SHUT DOWN EVERYTHING!") 

但它并没有停止。 这是代码编写 raise exception 而不是 return 也不会随着蜘蛛继续爬行而工作:

import scrapy 
from scrapy.http import Request 
 
from tutorial.items import DmozItem 
from scrapy.exceptions import CloseSpider 
import sys 
 
class DmozSpider(scrapy.Spider): 
    name = "tutorial" 
    allowed_domain = ["jabong.com"] 
    start_urls = [ 
            "http://www.jabong.com/women/shoes/sandals/?page=1" 
        ] 
 
    page_index = 1 
 
    def parse(self,response): 
        products = response.xpath('//li') 
 
        if products: 
            for product in products: 
                item = DmozItem() 
                item_url = product.xpath('@data-url').extract() 
                item_url = "http://www.jabong.com/" + item_url[0] if item_url else ''    
                if item_url: 
                        request=Request(url=item_url,callback=self.parse_page2,meta={"item":item}, 
                                headers={"Accept": 
                        "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}) 
                    request.meta['item'] = item 
                    yield request 
        else: 
            return 
 
        self.page_index += 1 
            if self.page_index: 
                    yield Request(url="http://www.jabong.com/women/shoes/sandals/?page=%s" %                        (self.page_index), 
            headers={"Referer": "http://www.jabong.com/women/shoes/sandals/", 
                 "X-Requested-With": "XMLHttpRequest"}, 
                        callback=self.parse) 
 
    def parse_page2(self, response): 
        sizes=[] 
        item = response.meta['item'] 
        item['site_name'] = 'jabong' 
        item['tags'] = '' 
        yield item 

更新: 而不是返回,即使我养了 closspider 我的蜘蛛也没有停止

请您参考如下方法:

return 也可以在这里工作,不是强制的,而是由于爬行逻辑 - 因为您不再产生任何请求。
但是请记住,您可能解释为“蜘蛛未关闭”的实际上是管道中已开始处理的剩余请求,并且需要更多时间才能完成处理。因此,蜘蛛不会在执行 return 的同一瞬间停止,因为管道中仍有请求。当它们都被处理后,如果没有新的创建,蜘蛛最终会停止。