RT,我想知道基础 scrapy 是如何管理队列的,我大致猜测是根据自带的队列池,并不依赖任何中间件。
我的需求是:
一旦达到特定条件,清除指定域名的队列,不再爬含有该域名的 url。
比如达到某个访问频次,就根据域名去清除该域名的所有爬行请求,但不影响爬行队列里已经存在的含有其他域名的 url。
我这边现在的情况是,根据文本 txt,喂给 scrapy 一部分 url,其中包含多个域名。
由于一些特殊情况,不是很方便用 redis 挨个 push url,好像这个也不太好根据域名去清除 url 队列,不过实在要用也请大家给个方案。
1
WilliamYang 2018-11-29 10:04:27 +08:00
你可以写个 Downloader Middleware, 然后在处理 request 时根据你的条件判断, 如果不满足就抛弃
|
2
WaJueJiPrince 2018-11-29 11:34:56 +08:00
Scrapy-Redis 有个功能是动态切换域名,不知道是不是你想要的。
|
3
akmonde OP @WilliamYang 中间件不满足抛弃的话,我那边也做了,但还是在爬触发了我条件的网站,不会停下对该域名的爬行的。
|
4
akmonde OP @WaJueJiPrince 不知道您说的是不是这个:
``` #动态域范围的获取 def __init__(self, *args, **kwargs): # Dynamically define the allowed domains list. domain = kwargs.pop('domain', '') self.allowed_domains = filter(None, domain.split(',')) super(MySpider, self).__init__(*args, **kwargs) ``` 我这边需要是的是条件触发清除指定域名的队列,好像跟这个不太符合。 |