scrapy爬虫设置停止的条件

  使用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()

这样就可以直接强制性的关闭进程。

上一篇:基于pipeline实现标题和URL持久化


下一篇:web爬虫讲解—Scrapy框架爬虫—Scrapy安装—Scrapy指令