本文所使用的 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. linux shell通过curl获取HTTP请求的状态码

    直接上代码: curl -I -m -o /dev/null -s -w %{http_code} www.baidu.com 参数说明: -I 仅测试HTTP头 -m 10 最多查询10s -o / ...

  2. Python对csv文件的读写操作

    python内置了csv模块,用它可以方便的操作csv文件. 1.写文件 (1)写文件的方法一 import csv # open 打开文件有多种模式,下面是常见的4种 # r:读数据,默认模式 # ...

  3. Flask 安装环境(虚拟环境安装)

    Flask 安装环境 使用虚拟环境安装Flask,可以避免包的混乱和冲突,虚拟环境是python解释器的副本,在虚拟环境中你可以安装扩展包,为每个程序 单独创建虚拟环境,可以保证程序只能访问虚拟环境中 ...

  4. Linux根目录下各目录含义

    /boot:系统启动的相关文件,比如内核,grub /etc:配置文件 /dev:设备文件 /root:root用户的家目录 /home:用户家目录 /lib:库文件 /bin:用户的命令文件 /sb ...

  5. IDEA maven项目添加自己的jar包依赖

    在pom中添加<dependency> <groupId>com.sim</groupId> <artifactId>SM-1.60</artif ...

  6. ts开发环境搭建

    ts为typescript的缩写,是javascript的超集. npm源改为国内 由于 Node 的官方模块仓库网速太慢,模块仓库需要切换到阿里的源. npm config set registry ...

  7. leetcode 贪心算法

    贪心算法中,是以自顶向下的方式使用最优子结构,贪心算法会先做选择,在当时看起来是最优的选择,然后再求解一个结果的子问题. 贪心算法是使所做的选择看起来都是当前最佳的,期望通过所做的局部最优选择来产生一 ...

  8. LG2996 「USACO10NOV」Visiting Cows

    问题描述 LG2996 题解 和没有上司的舞会双倍经验? \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; te ...

  9. go 接收发送文件

    package main import ( "fmt" "os" "net" "io" ) //发送文件内容 func ...

  10. vim跳到最后和最前

    1.跳到尾部和首部 :0或:1跳到文件第一行 :$跳到文件最后一行