RT,不知道我讲明白没,采用 redis 队列,依次读取未来会推送的 url。
但我在扫描某个 url,会触发某种条件,调用以下的代码:
self.crawler.engine.close_spider
在不启用 redis 推送,直接调用的时候,经测试,这个可以结束掉 spider。
但是在我启用了 redis 推送后,一旦触发调用该代码,是否整个 spider 直接结束,其他已经在跑的 url 和新推送的 url,都会不再爬取?
非常期待有经验的大佬给个提示,我这边只想特定条件结束掉单个 url,不影响其他 url 的爬取。
1
utoyuri 2018-12-04 21:53:31 +08:00
试过 scrapy_redis,调用 close_spider 时程序没有结束,至于后面的 url 有没有继续这个没有尝试。 如果只想过滤掉某个 url 的话,用 download middleware。
|
2
menyakun 2018-12-04 23:47:17 +08:00
redis 队列是指自定义了一个 scheduler,然后使用了自定义的队列?如果是这样的话,close_spider 的调用会触发队列的持久化,是不是这里 block 住了
|
3
rocketman13 2018-12-05 10:30:49 +08:00
在跑的肯定会跑完
|
4
akmonde OP @utoyuri 在 middleware 处尝试过滤 url,触发条件 raise IgnoreRequest,结果还是继续跑停不下来...
@menyakun 没有自定义 scheduler,只是在取 url 时实现 redis 推送。准确来说,我这边需要的是,触发条件对 url [或者某域名] 的请求进行过滤清除。 @rocketman13 我昨儿后来试了下 scrapy-redis,直接中止不再读取 redis 了,监听停止,没有继续跑呢。 |