背景:
剛開始學習scrapy爬蟲框架的時候,就在想如果我在服務器上執行一個爬蟲任務的話,還說的過去。但是我不能每個爬蟲任務就新建一個項目吧。例如我建立了一個知乎的爬行任務,但是我在這個爬行任務中,寫了多個spider,重要的是我想讓他們同時運行,怎么辦?
小白解決辦法:
1、在spiders同目錄下新建一個run.py文件,內容如下(列表里面最后可以加上參數,如--nolog)
2、小白想了(當時的我),這樣也行,mygod,那我豈不是多寫幾行就行就行了么,結果(結果白痴了),小白又想,那加個while循環,把爬蟲名字都寫入一個列表,這樣循環拿到每個spiders的name,結果更慘。
3、下面命令只限於,快速調試的作用或一個項目下單個spider的爬行任務。
from scrapy.cmdline import execute execute(['scrapy','crawl','httpbin'])
通過學習才知道原來是這樣子:
1、在spiders同級創建任意目錄,如:commands
2、在其中創建 crawlall.py 文件 (此處文件名就是自定義的命令)
crawlall.py
from scrapy.commands import ScrapyCommand from scrapy.utils.project import get_project_settings class Command(ScrapyCommand): requires_project = True def syntax(self): return '[options]' def short_desc(self): return 'Runs all of the spiders' def run(self, args, opts): spider_list = self.crawler_process.spiders.list() for name in spider_list: self.crawler_process.crawl(name, **opts.__dict__) self.crawler_process.start()
3、到這里還沒完,settings.py配置文件還需要加一條。
COMMANDS_MODULE = ‘項目名稱.目錄名稱’
COMMANDS_MODULE = 'zhihuuser.commands'
4、那么問題來了,如果我在spiders寫了多個爬行任務,我上面說了這么多,我最終需要怎么執行,so easy!你可以直接把下面這個命令放到計划任務里面,就行了。
scrapy crawlall