• 欢迎访问小杰博客网站
  • 欢迎访问小杰博客网站哦

同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)

未分类 小杰 3年前 (2016-03-10) 149次浏览 已收录 0个评论

试想一下,前面做的实验和例子都只有一个spider。然而,现实的开发的爬虫肯定不止一个。既然这样,那么就会有如下几个问题:1、在同一个项目中怎么创建多个爬虫的呢?2、多个爬虫的时候是怎么将他们运行起来呢?

说明:本文章是基于前面几篇文章和实验的基础上完成的。如果您错过了,或者有疑惑的地方可以在此查看:

安装python爬虫scrapy踩过的那些坑和编程外的思考

scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据

scrapy爬虫成长日记之将抓取内容写入mysql数据库

如何让你的scrapy爬虫不再被ban

一、创建spider

1、创建多个spider, scrapy genspider spidername domain

通过上述命令创建了一个spider name为CnblogsHomeSpider的爬虫,start_urls为http://www.cnblogs.com/的爬虫

2、查看项目下有几个爬虫scrapy list

由此可以知道我的项目下有两个spider,一个名称叫CnblogsHomeSpider,另一个叫CnblogsSpider。

更多关于scrapy命令可参考:http://doc.scrapy.org/en/latest/topics/commands.html

二、让几个spider同时运行起来

现在我们的项目有两个spider,那么现在我们怎样才能让两个spider同时运行起来呢?你可能会说写个shell脚本一个个调用,也可能会说写个python脚本一个个运行等。然而我在stackoverflow.com上看到。的确也有不上前辈是这么实现。然而官方文档是这么介绍的。

1、Run Scrapy from a script

这里主要通过 scrapy.crawler.CrawlerProcess来实现在脚本里运行一个spider。更多的例子可以在此查看:https://github.com/scrapinghub/testspiders

2、Running multiple spiders in the same process

  • 通过 CrawlerProcess

  • 通过 CrawlerRunner

  • 通过CrawlerRunner和链接(chaining) deferred来线性运行

这是官方文档提供的几种在script里面运行spider的方法。

三、通过自定义scrapy命令的方式来运行

创建项目命令可参考:http://doc.scrapy.org/en/master/topics/commands.html?highlight=commands_module#custom-project-commands

1、创建commands目录

注意:commands和spiders目录是同级的

2、在commands下面添加一个文件crawlall.py

这里主要通过修改scrapy的crawl命令来完成同时执行spider的效果。crawl的源码可以在此查看:https://github.com/scrapy/scrapy/blob/master/scrapy/commands/crawl.py

这里主要是用了self.crawler_process.spider_loader.list()方法获取项目下所有的spider,然后利用self.crawler_process.crawl运行spider

3、commands命令下添加__init__.py文件

注意:这一步一定不能省略。 我就是因为这个问题折腾了一天。囧。。。就怪自己半路出家的吧。

如果省略了会报这样一个异常

一开始怎么找都找不到原因在哪。耗了我一整天,后来到http://stackoverflow.com/上得到了网友的帮助。再次感谢万能的互联网,要是没有那道墙该是多么的美好呀!扯远了,继续回来。

4、settings.py目录下创建setup.py( 这一步去掉也没影响,不知道官网帮助文档这么写有什么具体的意义。 )

这个文件的含义是定义了一个crawlall命令,cnblogs.commands为命令文件目录,crawlall为命令名。

5. 在settings.py中添加配置:

6. 运行命令scrapy crawlall

最后源码更新至此: https://github.com/jackgitgz/CnblogsSpider


小杰博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址