本文所使用的 Scrapy 版本:Scrapy==1.8.0

一个 Scrapy 项目下可能会有多个爬虫,本文陈述两种情况:

  1. 多个爬虫
  2. 所有爬虫

显然,这两种情况并不一定是等同的。假设当前项目下有 3 个爬虫,分别名为:route、dining、experience,并在项目目录下创建一个 main.py 文件,下面的示例代码都写在这个文件中,项目执行时,在命令行下执行 python main.py 或者在 pycharm 中把这个脚本文件设置为执行脚本即可。

1. 运行多个爬虫

核心点:使用 CrawlerProcess

代码如下:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings # 根据项目配置获取 CrawlerProcess 实例
process = CrawlerProcess(get_project_settings()) # 添加需要执行的爬虫
process.crawl('route')
process.crawl('dining')
process.crawl('experience') # 执行
process.start()

2. 运行所有爬虫

核心点:使用 SpiderLoader

代码如下:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from scrapy.spiderloader import SpiderLoader # 根据项目配置获取 CrawlerProcess 实例
process = CrawlerProcess(get_project_settings()) # 获取 spiderloader 对象,以进一步获取项目下所有爬虫名称
spider_loader = SpiderLoader(get_project_settings()) # 添加需要执行的爬虫
for spidername in spider_loader.list():
process.crawl(spidername) # 执行
process.start()

3. 关于 ScrapyCommand

网上有部分文章说到使用 ScrapyCommand 这个类下面的 crawler_process.list() 方法可以得到项目下的所有爬虫名称,但我在最新的官方文档中已经搜索不到 ScrapyCommand 这个类,估计是已经弃用了

4. 其它

如果需要向某个爬虫传递参数,可以在 process.crawl 方法中添加进去,例如:

process.crawl('dining', dt='20191119')

则在 dining 这个爬虫(类)中,可以在 __init__ 方法中接收这个 dt 参数。例如:

class Dining(scrapy.Spider):
name = 'dining' def __init__(self, dt)
self.dt = dt

Scrapy 运行多个爬虫的更多相关文章

  1. Learning Scrapy笔记(七)- Scrapy根据Excel文件运行多个爬虫

    摘要:根据Excel文件配置运行多个爬虫 很多时候,我们都需要为每一个单独的网站编写一个爬虫,但有一些情况是你要爬取的几个网站的唯一不同之处在于Xpath表达式不同,此时要分别为每一个网站编写一个爬虫 ...

  2. 使用scrapy制作的小说爬虫

    使用scrapy制作的小说爬虫 爬虫配套的django网站  https://www.zybuluo.com/xuemy268/note/63660 首先是安装scrapy,在Windows下的安装比 ...

  3. 基于Python,scrapy,redis的分布式爬虫实现框架

    原文  http://www.xgezhang.com/python_scrapy_redis_crawler.html 爬虫技术,无论是在学术领域,还是在工程领域,都扮演者非常重要的角色.相比于其他 ...

  4. scrapy运行机制

    Scrapy主要包括了以下组件: 引擎(Scrapy)用来处理整个系统的数据流, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回 ...

  5. scrapy 6023 telnet查看爬虫引擎相关状态

    Telnet终端(Telnet Console) Scrapy提供了内置的telnet终端,以供检查,控制Scrapy运行的进程. telnet仅仅是一个运行在Scrapy进程中的普通python终端 ...

  6. scrapy——7 scrapy-redis分布式爬虫,用药助手实战,Boss直聘实战,阿布云代理设置

    scrapy——7 什么是scrapy-redis 怎么安装scrapy-redis scrapy-redis常用配置文件 scrapy-redis键名介绍 实战-利用scrapy-redis分布式爬 ...

  7. Scrapy笔记10- 动态配置爬虫

    Scrapy笔记10- 动态配置爬虫 有很多时候我们需要从多个网站爬取所需要的数据,比如我们想爬取多个网站的新闻,将其存储到数据库同一个表中.我们是不是要对每个网站都得去定义一个Spider类呢? 其 ...

  8. 基于Scrapy的B站爬虫

    基于Scrapy的B站爬虫 最近又被叫去做爬虫了,不得不拾起两年前搞的东西. 说起来那时也是突发奇想,想到做一个B站的爬虫,然后用的都是最基本的Python的各种库. 不过确实,实现起来还是有点麻烦的 ...

  9. Scrapy+Scrapyd+Scrapydweb实现爬虫可视化

    Scrapy+Scrapyd+Scrapydweb实现爬虫可视化 Scrapyd是一个服务,用来运行scrapy爬虫的 它允许你部署你的scrapy项目以及通过HTTP JSON的方式控制你的爬虫 官 ...

随机推荐

  1. Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战

    Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...

  2. linux下 sort | uniq | wc | less 几个命令的基本用法

    sort -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法: -n :使用『纯数字』进行 ...

  3. DQL---连接查询(内连接、外连接)、子查询、分页查询

    一.连接查询 1.连接查询建立在有相互关系的两个表间,进行两个及两个以上的表或视图的查询. 2.对n张表进行查询,至少需要n-1个连接表的条件. 二.笛卡尔积(容易造成数据库宕机) 1.指表中每行元素 ...

  4. iOS音频与视频的开发(一)-使用AVAudioPlayer播放音乐、使用AVPlayerViewController播放视频

    iOS的多媒体支持非常强大,它提供了多套支持多媒体的API,无论是音频.视频的播放,还是录制,iOS都提供了多种API支持.借助于这些API的支持,iOS应用既可以查看.播放手机相册中的照片.视频,也 ...

  5. Flutter学习笔记(1)--环境安装

    flutter最近显得格外的火,公司的同事也一直在谈论flutter,感觉自己不学学就要失业了...所以决定顺应潮流学习以下flutter,做一下学习笔记,希望可以给需要的同学带来一些帮助~ 正文为f ...

  6. 【LeetCode】TreeNode类实现解析(java实现)

    https://blog.csdn.net/styshoo/article/details/52865386 在LeetCode中,TreeNode是经常用到的一个结构体,表示数据结构树(Tree)中 ...

  7. [20190524]使用use_concat or_expand提示优化.txt

    [20190524]使用use_concat or_expand提示优化.txt --//上午看了链接https://connor-mcdonald.com/2019/05/22/being-gene ...

  8. LOBs and ORA-01555 troubleshooting (Doc ID 846079.1)

    LOBs and ORA-01555 troubleshooting (Doc ID 846079.1) APPLIES TO: Oracle Database Cloud Schema Servic ...

  9. express 将 Router 实例模块化

    为了更好的组织代码,将 Router 实例进行模块化,将 get / post 等快捷方式放在Router上,而不是 App 上,然后将该 Router 作为中间件,use 到 server.js 上 ...

  10. C学习笔记(1)---数据类型,变量,储存类

    1.常用基本数据类型占用空间(64位机器为例): char : 1个字节 -- int :4个字节 -- float:4个字节 -- double:8个字节 2.书写类型: A.整数: a. 默认为1 ...