scrapy同时运行多个spider
2019独角兽企业重金招聘Python工程师标准>>>
scrapy爬虫的运行通常是通过scrapy crawl spidername 一个个运行的,如有多个spider文件需要批量运行,常见的有两种方法:
1、使用CrawlProcess实现
2、使用修改crawl源码+自定义命令的方式实现
本文主要讲一下方法2的实现。
思路:1、根据scrapy中crawl命令的源码,进行相应的修改,并写一个自己的python文件,相当于定义了一个新命令。
2、还需要使用scrapy添加自定义命令的功能为我们所写的代码添加一个自定义命令,然后就可以根据这个自定义命令,运行多个爬虫文件了。
1、首先创建一个scrapy项目,并在该项目中创建多个爬虫文件。
创建scrapy项目mymultispider
scrapy startproject mymultispider
创建三个spider文件myspd1, myspd2, myspd3
scrapy gensipder -t basic myspd1 sina.com.cn
scrapy gensipder -t basic myspd2 sina.com.cn
scrapy gensipder -t basic myspd3 sina.com.cn
2、修改crawl源码
查看Crawl源码(可以从scrapy官方的github项目中找到:https://github.com/scrapy/scrapy/blob/master/scrapy/commands/crawl.py),发现crawl命令的源码文件中,
Command类下面的run()方法中指定了要运行哪些爬虫文件,具体通过crawler_process.crawl(spname, **opts.spargs)实现爬虫文件的运行,spname指的是爬虫名。
所以,我们要实现一次运行多个爬虫文件,关键是需要修改run()方法。同时,我们还需要通过crawler_process.spider_loader.list()实现获取所有的爬虫文件。
根据此思路,我们可以修改crawl命令的源码来建立自己的自定义命令所对应的python源码。
a、在spiders目录的同级目录下创建一个mycmd目录,并在该目录中创建一个mycrawl.py,将crawl源码复制过来,修改run()方法。
源码中的run()方法:
def run(self, args, opts):
if len(args) < 1:
raise UsageError()
elif len(args) > 1:
raise UsageError('running "scrapy crawl" with more than one spider is no longer supported')
spname = args[0]
self.crawler_process.crawl(spname, **opts.spargs) #运行爬虫
self.crawler_process.start()
修改为:
def run(self, args, opts):
#获取爬虫列表
spd_loader_list = self.crawler_process.spider_loader.list()
#遍历各爬虫
for spname in spd_loader_list or args:
self.crawler_process.crawl(spname, **opts.spargs)
print("此时启动的爬虫:"+spname)
self.crawler_process.start()
在run()方法中先获取爬虫列表,然后再依次通过for循环遍历各爬虫,遍历时使用crawler_process.crawl()运行当前得到的spider爬虫文件,并输出当前爬虫文件的信息,便于调试与观察。
最后,在该文件的同级目录下添加一个初始化文件__init__.py 。
b、通过需要添加一个自定义命令。
可以在项目配置文件(setting.py)中进行相应配置,格式:"COMMANDS_MODULE='项目核心目录.自定义命令源码目录'",具体如下:
COMMANDS_MODULE = 'mymultispd.mycmd'
随后,在命令行中进入该项目所在目录,并输入scrapy -h,可以查看是否有命令mycrawl 。如果有,就可以使用自定义命令mycrawl启动所有爬虫文件了。
转载于:https://my.oschina.net/u/3767248/blog/1790432
scrapy同时运行多个spider相关推荐
- Python爬虫:scrapy 的运行流程和各模块的作用
scrapy的运行流程 爬虫 -> 起始URL封装Request -> 爬虫中间件 -> 引擎 -> 调度器(Scheduler): 缓存请求, 请求去重 调度器 -> ...
- Python3.7 Scrapy crawl 运行出错解决方法
Python3.7 Scrapy crawl 运行出错解决方法 参考文章: (1)Python3.7 Scrapy crawl 运行出错解决方法 (2)https://www.cnblogs.com/ ...
- PHP如何启动scrapy,python,_新手Scrapy爬虫运行问题,python - phpStudy
新手Scrapy爬虫运行问题 新人刚开始学习Scrapy,成功安装Scrapy,运行第一个程序还是报错,望高手帮忙解答,感激不尽 错误提示 Traceback (most recent call la ...
- Scrapy:运行爬虫程序的方式
Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0, 在创建了爬虫程序后,就可以运行爬虫程序了.Scrapy中介绍了几种运行爬虫程序的方式,列举如下: -命令行工具之s ...
- 解决scrapy爬虫框架多个spider指定pipeline
现在来看一个问题:当存在多个爬虫的时候如何指定对应的管道呢? 这里定义了两个爬虫:film.meiju 1.首先想到settings设置文件. settings里针对item_pipelines的设置 ...
- Scrapy框架(二)——Spider
这里我将spiders的意思理解为在项目Spiders目录下创建的各个py文件(除__init__).它们的作用是负责网页的抓取逻辑,以及数据的解析逻辑.所以Spider是Scrapy爬虫中相对核心的 ...
- scrapy没有运行结果_关于Scrapy爬虫项目运行和调试的小技巧(下篇)
前几天给大家分享了关于Scrapy爬虫项目运行和调试的小技巧上篇,没来得及上车的小伙伴可以戳超链接看一下.今天小编继续沿着上篇的思路往下延伸,给大家分享更为实用的Scrapy项目调试技巧. 三.设置网 ...
- Scrapy Crawl 运行出错 AttributeError: 'xxxSpider' object has no attribute '_rules' 的问题解决...
按照官方的文档写的demo,只是多了个init函数,最终执行时提示没有_rules这个属性的错误日志如下: ......File "C:\ProgramData\Anaconda3\lib\ ...
- scrapy组件、中间件、spider中类方法from_crawler的作用
@classmethod def from_crawler(cls, crawler, *args, **kwargs):spider = cls(*args, **kwargs)spider._se ...
最新文章
- 全球5G专利能力榜T0P15出炉:谁是冠军?
- 视觉库—OpenCV
- 非涉密计算机检查的通知,关于开展非涉密计算机及可移动存储介质专项清理活动的紧急通知...
- Mine Sweeper II
- 可以在循环体内声明局部变量吗?
- 比特币的缺陷以及改进
- 【linux】Linux配置环境变量
- 关于微信支付接口,curl错误代码58
- Servlet doGet doPost 中获取参数 中文乱码
- word文字校对工具_如何在Word中使用校对面板
- 无标度网络(scale-free network)
- 网页设计css入门,网页设计基础:Div+CSS布局入门教程
- linux文件夹压缩与分卷压缩
- Python办公自动化实战 01 | Python优势与自动化思维让你的工作化繁为简
- 机顶盒播放流媒体服务器的文件,IPTV机顶盒的流媒体播放器设计
- 解决百度网盘登录安全验证显示空白页
- sudo rosdep init找不到命令或失败解决办法
- redis命令之string类型incr/decr命令用法详情
- pyside2 系列之介绍,安装,简单例子
- tensorflow2.0 预测新文本(一)
热门文章
- 对比Compose 、kotlin、flutter 移动端跨平台的未来。
- Android 颜色设置:透明度换算
- Linux中ELF格式 可执行文件+动态链接器 的加载
- 【Redis】17.Cluster集群结构搭建
- 15-垃圾回收相关算法
- maven(android-maven-plugin3.8.0)打包apk无法启动,apklib依赖包的资源索引出错(R文件与主模块冲突)问题解析
- Weka java.lang.reflect.InvocationTargetException
- html5-6 Frame框架窗口类型
- 关于如何正确地在android项目中添加第三方jar包
- Sharepoint学习笔记—Site Definition系列-- 5、List Definition与List Template之比较