前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个Scrapy项目下的多个爬虫如何同时运行?

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

作者头像
青南
发布2020-07-16 14:17:26
2.5K0
发布2020-07-16 14:17:26
举报
文章被收录于专栏:未闻Code未闻Code

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

代码语言:javascript
复制
scrapy crawl xxx

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

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

代码语言:javascript
复制
from scrapy.cmdline import execute

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

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

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

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

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

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

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

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

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

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

它的用法如下:

代码语言:javascript
复制
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代码为:

代码语言:javascript
复制
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()

运行效果如下图所示:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档