scrapy同时运行多个spider
2019獨角獸企業重金招聘Python工程師標準>>>
scrapy爬蟲的運行通常是通過scrapy crawl spidername 一個個運行的,如有多個spider文件需要批量運行,常見的有兩種方法:
1、使用CrawlProcess實現
2、使用修改crawl源碼+自定義命令的方式實現
本文主要講一下方法2的實現。
思路:1、根據scrapy中crawl命令的源碼,進行相應的修改,并寫一個自己的python文件,相當于定義了一個新命令。
?? ?? 2、還需要使用scrapy添加自定義命令的功能為我們所寫的代碼添加一個自定義命令,然后就可以根據這個自定義命令,運行多個爬蟲文件了。
?? ? ?
1、首先創建一個scrapy項目,并在該項目中創建多個爬蟲文件。
?? ?創建scrapy項目mymultispider
?? ?scrapy startproject mymultispider
?? ?創建三個spider文件myspd1, myspd2, myspd3
?? ?scrapy gensipder -t basic myspd1 sina.com.cn
?? ?scrapy gensipder -t basic myspd2 sina.com.cn
?? ?scrapy gensipder -t basic myspd3 sina.com.cn
?? ?
2、修改crawl源碼
?? ?查看Crawl源碼(可以從scrapy官方的github項目中找到:https://github.com/scrapy/scrapy/blob/master/scrapy/commands/crawl.py),發現crawl命令的源碼文件中,
?? ?Command類下面的run()方法中指定了要運行哪些爬蟲文件,具體通過crawler_process.crawl(spname, **opts.spargs)實現爬蟲文件的運行,spname指的是爬蟲名。
?? ?所以,我們要實現一次運行多個爬蟲文件,關鍵是需要修改run()方法。同時,我們還需要通過crawler_process.spider_loader.list()實現獲取所有的爬蟲文件。
?? ?根據此思路,我們可以修改crawl命令的源碼來建立自己的自定義命令所對應的python源碼。
?? ?
?? ?a、在spiders目錄的同級目錄下創建一個mycmd目錄,并在該目錄中創建一個mycrawl.py,將crawl源碼復制過來,修改run()方法。
?? ?源碼中的run()方法:
?? ??? ?def run(self, args, opts):
?? ??? ??? ?if len(args) < 1:
?? ??? ??? ??? ?raise UsageError()
?? ??? ??? ?elif len(args) > 1:
?? ??? ??? ??? ?raise UsageError('running "scrapy crawl" with more than one spider is no longer supported')
?? ??? ??? ?spname = args[0]
?? ??? ??? ?
?? ??? ??? ?self.crawler_process.crawl(spname, **opts.spargs) #運行爬蟲
?? ??? ??? ?self.crawler_process.start()
?? ?修改為:
?? ??? ?def run(self, args, opts):
?? ??? ??? ?#獲取爬蟲列表
?? ??? ??? ?spd_loader_list = self.crawler_process.spider_loader.list()
?? ??? ??? ?#遍歷各爬蟲
?? ??? ??? ?for spname in spd_loader_list or args:
?? ??? ??? ??? ?self.crawler_process.crawl(spname, **opts.spargs)
?? ??? ??? ??? ?print("此時啟動的爬蟲:"+spname)
?? ??? ??? ?self.crawler_process.start()
?? ??? ??? ??? ?
?? ?在run()方法中先獲取爬蟲列表,然后再依次通過for循環遍歷各爬蟲,遍歷時使用crawler_process.crawl()運行當前得到的spider爬蟲文件,并輸出當前爬蟲文件的信息,便于調試與觀察。
?? ?最后,在該文件的同級目錄下添加一個初始化文件__init__.py 。
?? ?
?? ?
?? ?b、通過需要添加一個自定義命令。
?? ??? ?可以在項目配置文件(setting.py)中進行相應配置,格式:"COMMANDS_MODULE='項目核心目錄.自定義命令源碼目錄'",具體如下:
?? ??? ??? ?COMMANDS_MODULE = 'mymultispd.mycmd'
?? ??? ?隨后,在命令行中進入該項目所在目錄,并輸入scrapy -h,可以查看是否有命令mycrawl 。如果有,就可以使用自定義命令mycrawl啟動所有爬蟲文件了。
轉載于:https://my.oschina.net/u/3767248/blog/1790432
總結
以上是生活随笔為你收集整理的scrapy同时运行多个spider的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS 中的各种居中 (水平、垂直)
- 下一篇: 《程序员代码面试指南》第二章 链表问题