本文所使用的 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

最新文章

  1. linux解压rar压缩文件
  2. Ubuntu下的MySQL安装
  3. 加载UI
  4. sql datetime操作
  5. unity3d 射线扫描 忽略图层
  6. poj 3280 Cheapest Palindrome ---(DP 回文串)
  7. 【数据库系列学习一】Access与Excel的区别和联系
  8. 如何同时完成多个ajax之后再执行某个方法 ? 使用$.when().done();
  9. 从一个word文件中读取所有的表格和标题(1)
  10. STM32F4 串口实验中收不到超级终端发送的数据,调试工具却可以
  11. Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享
  12. mysql防注入
  13. LINQ 初步了解
  14. nodeJS删除文件
  15. 第2章 2.n物理层--数据通信基础知识总结
  16. gensim工具[学习笔记]
  17. nodejs zip压缩版安装与配置
  18. java concurrent之ReentrantLock
  19. express 设置header解决跨域问题
  20. Java基础(十)数据结构

热门文章

  1. 软件设计之基于Java的连连看小游戏(二)——游戏基础界面的制作及事件的添加
  2. jQuery的选择器总结
  3. 从高版本的 SQL Server 向低版本的 SQL Server 转移数据
  4. STM32 IAP 升级功能
  5. Python函数基础和函数参数
  6. [日常] gocron源码阅读-使用go mod管理依赖源码启动gocron
  7. 各版本mysql修改root密码
  8. CF613B Skills
  9. NOIP模拟赛three(3)
  10. Ajax常用例子 Post 和 Get