您当前的位置:首页 > 计算机 > 编程开发 > Python

一个Scrapy项目下的多个爬虫如何同时运行

时间:08-25来源:作者:点击数:

我们知道,如果要在命令行下面运行一个 Scrapy 爬虫,一般这样输入命令:

scrapy crawl xxx

此时,这个命令行窗口在爬虫结束之前,会一直有数据流动,无法再输入新的命令。如果要运行另一个爬虫,必须另外开一个命令行窗口。

我们也知道,可以通过两条Python 代码,在 Python 里面运行 Scrapy 爬虫:

from scrapy.cmdline import execute

execute('scrapy crawl xxx'.split())

假设我们把这两行代码放在一个Scrapy 项目根目录下名为 main.py 的文件里面。当我们运行这个文件python3 main.py,Scrapy 爬虫也能正常启动。

但如果我们要运行同一个项目下面的两个爬虫,也需要开两个命令窗口。

那么,有没有什么办法,在一个命令窗口里面,同时运行同一个 Scrapy 项目下面的多个爬虫呢?

假设我们有一个 Scrapy 项目叫做test_multple_crawler,它下面有两个爬虫exerciseua

运行exercise时,爬虫输出如下图所示:

image

运行ua时,爬虫输出如下图所示:

image

如果我把运行两个爬虫的代码同时写到main.py里面会怎么样呢?我们试试看:

image

可以看到,这两个爬虫是串行运行的。首先第一个爬虫运行。直到它里面所有代码全部运行完成了,它结束了以后,第二个爬虫才会开始运行。这显然不是我们需要的。

为了让同一个 Scrapy 项目下面的多个爬虫实现真正的同时运行,我们可以使用 Scrapy 的CrawlerProcess

它的用法如下:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

settings = get_project_settings()

crawler = CrawlerProcess(settings)
crawler.crawl('爬虫名1')
crawler.crawl('爬虫名2')
crawler.crawl('爬虫名3')
crawler.start()

使用这种方法,可以在同一个进程里面跑多个爬虫。

回到我们的例子中,修改 main.py代码为:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

settings = get_project_settings()

crawler = CrawlerProcess(settings)

crawler.crawl('exercise')
crawler.crawl('ua')

crawler.start()
crawler.start()

运行效果如下图所示:

image

可以看到,两个爬虫真正实现了同时运行。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐