背景:python
剛開始學習scrapy爬蟲框架的時候,就在想若是我在服務器上執行一個爬蟲任務的話,還說的過去。可是我不能每一個爬蟲任務就新建一個項目吧。例如我創建了一個知乎的爬行任務,可是我在這個爬行任務中,寫了多個spider,重要的是我想讓他們同時運行,怎麼辦?服務器
小白解決辦法:框架
一、在spiders同目錄下新建一個run.py文件,內容以下(列表裏面最後能夠加上參數,如--nolog)scrapy
二、小白想了(當時的我),這樣也行,mygod,那我豈不是多寫幾行就行就好了麼,結果(結果白癡了),小白又想,那加個while循環,把爬蟲名字都寫入一個列表,這樣循環拿到每一個spiders的name,結果更慘。ide
三、下面命令只限於,快速調試的做用或一個項目下單個spider的爬行任務。學習
from scrapy.cmdline import execute execute(['scrapy','crawl','httpbin'])
經過學習才知道原來是這樣子:ui
一、在spiders同級建立任意目錄,如:commandsspa
二、在其中建立 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()
三、到這裏還沒完,settings.py配置文件還須要加一條。code
COMMANDS_MODULE = ‘項目名稱.目錄名稱’
COMMANDS_MODULE = 'zhihuuser.commands'
四、那麼問題來了,若是我在spiders寫了多個爬行任務,我上面說了這麼多,我最終須要怎麼執行,so easy!你能夠直接把下面這個命令放到計劃任務裏面,就好了。
scrapy crawlall