使用scrapy做爬虫程序时,有时候我们需要在爬虫满足一定条件时,将程序中断掉,从而不再向服务器发送已经没有意义的请求。
一:scrapy中提供的两种停止的方式:
1.在spider中停止爬虫:
在解析函数中调用内置函数
self.crawler.engine.close_spider(self, "当调用此方法时打印信息为:无有效信息,关闭spider")
设置条件,当满足一定的条件时执行此代码,则可以停止掉爬虫程序。但是经过我的反复试验,执行此代码之后爬虫程序并不会立即关闭,而是还会运行一段时间。
造成这种现象存在两种可能:
(1).调用关闭方法之后会将请求队列中的所有的url请求完之后才会完全停止。
(2).在执行此语法后,所在的解析函数不再产生新的url进入队列中,但是后续的解析函数还是会执行,一直到后面的所有的解析函数全部完成。
(经过几次试验,发现是第二种可能,但又不完全确定,如果有大神知道此处的逻辑,可以交流一下)
2.在pipeline中停止爬虫:
类似于上面的方式,只不过是在pipeline中执行
spider.crawler.engine.close_spider(spider, "无有效信息,关闭spider") # pepline 中使用此关闭方法
调用此语法之后同样有上面的没有立即停止的情况。
**二:使用os关闭程序
此方法与scrapy内置的关闭方法相似,只不过是使用os强制关闭进程。
首先导入os包
import os # 引入os包
然后跟前面的方法类似,设置条件,当满足条件时执行
os.exit()
这样就可以直接强制性的关闭进程。