写在前面:
强调一下,使用scrapyd并不是就装一个scrapyd就完事了,为了更方便的使用scrapyd,还需要安装一个scrapyd-client,scrapyd相当于一个服务器,为了方便使用这个服务器我们需要在一个客户机上对他进行操作,关系如此。为何要使用scrapyd,个人认为主要分为两点:
- 更优爬虫进行调度(个人使用场景:也是我使用scrapyd的主要原因,使用场景大致是这样,我需要对一个网站的1000个入口往下进行爬去,通过参数控制启动1000个爬虫,scrapyd不会让这1000个同时启动而是会依次跑下来这样,能同时运行多少爬虫是根据机器性能自适应决定的)
- 方便往服务器上部署爬虫(原设计原因)
配置
首先安装scrapyd,mac下安装的话,直接pip安装即可,ubuntu下有专门的scrapyd源,需要单独配置:
pip install scrapyd
安装完成后启动服务,默认的端口是6800,打开localhost:6800即可
scrapyd
然后安装scrapyd-client
pip install scrapyd-client
环境配置到此结束
使用
(丢人的分割,今天打开简书发现了一年前写的东西,已经忘得差不多了凭着记忆写一下方便以后在要用到的时候查资料吧。。。我能说第一行ubuntu有专门的源要单独配置我都忘了吗。。。ubuntu用户自己查下吧简单的)
先说一下scrapyd-client的运作机制吧,scrapyd-client的作用和web开发中的gulp作用有点类似(gulp我没用过说错了别打我),用于打包你的工程提供给scrapyd服务器,因为是python所以会生成一个egg文件,首先修改默认生成的scrapy.cfg文件,其中deploy被注释掉了,将注释删掉,恢复默认的deploy确保使用先,进一步修改根据个人需求再来吧。修改好的scrapy.cfg形式如下,默认的是没有target这个参数的,需要配置其他的target部署直接在后面添加写上自己喜欢的target即可
[deploy:<target>]
url = <url>
project = <project>
使用以下命令将对应的工程部署到scrapyd服务器上去,如果工程没有问题,完成eggify后(蛋化,不知道中文该咋说),会得到一个200的response,如果错了去跑跑爬虫看看吧,出错基本都是代码本身的问题。version可以不加,默认应该是使用时间戳来进行版本控制的,只要主机时间不要乱跳一般不会有大问题,如果自己进行版本控制注意版本号的管理不要最后自己也乱了
scrapyd-deploy <target> -p <project> --version <version>
部署完成后,在对应的工程目录下,输入
scrapyd-deploy -l
就可以查看目录下打包的项目有什么,注意这里的l是小写,含义和ls基本一致,L大写有更进一步细化的作用,基本操作中用不上,也就不表了。
完成上述操作后,可以使用scrapyd来控制爬虫了,其中-d参数是可选的,用于给爬虫传入额外的参数,例如
curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
如果启动成功会给你返回
{"status": "ok", "jobid": "6487ec79947edab326d6db28a2d86511e8247444"}
这里的jobid可以在其他的操作中使用,比如中止爬虫等等,一般用不上,也不写了,要用查一下API很简单的。