在一个Scrapy爬虫项目写好之后,启动和查看日志还不算麻烦,但是如果你的爬虫多,且启动方式及时间,比较有要求,那脚本管理,会非常的麻烦,有没有什么简单且方便的管理和部署工具呢?
答案当然是有的,且这类工具还是比较多的,在此,本篇文章,就是针对于Scrapy项目的部署方式和工具,进行介绍
1. scrapy项目的cfg文件
在介绍正式部署前,首先了解下Scrapy的部署内容
首先,一个完整的Scrapy项目,里面必须含有cfg后缀文件,和所需的py文件,以及spider目录下的爬虫文件,还有可能包含一些自定义的python包和工具函数。
下图是一个最基础的爬虫项目的目录结构图【工具是Pycharm】:
其中,除了cfg文件之外,其他的py文件,都是给爬虫运行用的,都和部署没什么关系。那顺便来看下cfg文件的内容:
在这里面,有两个,第一个是settings,是指定项目中的配置文件;第二个是deploy,是部署用的,不过默认的url,被注释了,因为这是命令行部署用的,不太推荐
2. Scrapy配套的部署工具库
本篇文章的目的是部署和管理,但是部署的操作还是要学的,因为这是基础。
为了方便的管理scrapy项目中爬虫的运行,scrapy框架有配套的部署工具,那就是scrapyd【注意,多了一个d】
这个scrapyd框架,负责运行scrapyd项目,并且会记录日志。他的主要功能有:
- 接收scrapy项目
- 查看scrapy项目爬虫
- 启动scrapy爬虫
- 查看运行中的scrapy
- 查看运行结束的scrapy
功能够多吧,且说实话,都非常实用。但是呢,操作比较蛋疼,虽然scrapyd提供web界面,但是只能看,不能管理,管理需要命令行,那这就.....不免让大佬们心痒,纷纷推出了各自的Web管理工具,下文介绍。
那这里呢,来说下scrapy、scrapyd之间的耦合,以及其他的第三方库。
所需库的安装【未展示scrapy的安装,因为这里介绍部署,默认你了解了scrapy的开发】:
- pip install scrapyd【运行scrapy的容器】
- pip install scrapyd-client【用于打包scrapy项目到scrapyd中】
这里涉及到scrapyd和scrapyd-client两个库,前者是服务型,用于跑scrapy爬虫的;后者是工具函数,用于打包scrapy文件的;
3. Scrapyd-client介绍
在scrapyd-client安装好之后呢,就有scrapy-deploy这个命令,但是你未必可以直接使用,可能会出现如下效果图:
问:不是已经安装了scrapyd-client,为什么系统无法识别呢?这个是什么原因导致的呢?
答:是因为呀,在scrapyd-client安装的时候,提供了scrapyd-deploy的py文件,但是没有后缀,所以系统不能直接识别
问:那怎么处理呢?
答:这个文件的路径呢,是在你的Python安装位置的Scripts目录下,你需要在这里面,创建一个名为scrapyd-deploy.bat
的文件,内容是:
@echo off
C:/Users/kelly/Anaconda3/python.exe C:/Users/kelly/Anaconda3/Scripts/Scrapyd-deploy
Tips:
-
@echo off
是关闭具体执行命令输出的意思,如果你是win系统,可以去掉,对比看看 - 这里面的路径,是我电脑上的Python路径,需要改成你的Python路径
- bat是win系统可直接执行的文件,如果你的系统是Linux或Macos,需要写sh或可执行文件;
这个文件添加好之后,重开一个CMD【终端】,测试效果,如下截图:
这个截图说明命令行正常工作了,但是当前的桌面目录,不是一个有效的scrapy项目,即不在scrapy项目内
那工具的安装和测试,一切正常了,下面开始学习下scrapyd的作用
4. Scrapyd介绍
简单来描述下,scrapy是一个项目,scrapyd是管理scrapy正常运行的容器,可以停止、启动、查看状态,当然,这些都是命令行启动【这是最大的缺陷】
当然scrapyd也是可以配置的,配置文件在scrapyd库里面,如下图:
打开它,内容是这样的,#后面是添加的注释:
[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 4 #同时运行的最大进程数 = 4*核心数
finished_to_keep = 100
poll_interval = 5.0
bind_address = 127.0.0.1 #本机用 127.0.0.1,外网访问改成 0.0.0.0
http_port = 6800 #默认端口,可以改,或者多开
debug = off #调试模式,默认关闭
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root
[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus
上面都是默认配置,通常改了端口或者绑定的IP,其余的都不用怎么修改。
修改好之后,打开CMD,进入到桌面上,然后执行scrapyd命令,服务就启动了,如下图:
在日志中,有个127.0.0.1:6800的连接,使用浏览器打开,有对应的页面,如下图:
这就是正常的页面了
嗯,没错,虽然丑,但也是他,就是他
好了,都正常了,那要怎么使用了?在这个界面上,有个curl http://localhost:6800/schedule.json -d project=default -d spider=somespider
命令,没错,这就是驱使scrapyd工作的命令
挺崩溃的,虽然可以管理爬虫,但是命令管理,难免让人心烦.......有界面有按钮的才是管理,这个是折磨
别急,界面管理,下次分享,这次先打基础,熟悉下而已
5. 学习使用命令部署爬虫
在一切的开始前,我们需要先处理个东西,就是cfg文件,前面介绍过这是项目部署用的,现在在他里面改动一个内容,如下:
去掉之后,这部署,才会有目标地址
于此同时,scrapyd也需要打开,且url指定的地址,就可以访问到scrapyd容器服务
然后在spbeen的项目目录内,打开终端,输入命令scrapyd-deploy --build-egg spbeen.egg
效果图如下:
图中有Server response(200)的字样,说明爬虫已经部署上去了
那,要怎么看scrapyd的状态呢?就那个丑的要死的界面,是没办法管理的
当然是命令行控制了,再坚持一下,马上就要学完了
6. 命令行调度
1、查看scrapyd目前的状态:
命令行:curl http://localhost:6800/daemonstatus.json
返回结果:{"node_name": "v-win10", "status": "ok", "pending": 0, "running": 0, "finished": 0}
2、列出Scrapyd中的项目
命令行:curl http://localhost:6800/listprojects.json
返回值:{"node_name": "v-win10", "status": "ok", "projects": ["spbeen"]}
3、查看项目中的爬虫
命令行:curl http://localhost:6800/listspiders.json?project=spbeen
返回值:{"node_name": "v-win10", "status": "ok", "spiders": ["sp"]}
4、启动爬虫
命令行:curl http://localhost:6800/schedule.json -d project=spbeen -d spider=sp
返回值:{"node_name": "v-win10", "status": "ok", "jobid": "5514a540ad6811e98d0bd8c497f4e6f4"}
以上四个命令的配图:
5、Scrapyd网页界面的爬虫执行记录和日志截图
Scrapyd支持的命令行很多,贴个官方的API文档链接:Scrapy官方连接
以上就是本篇文章的全部介绍内容了
!放在最后
如果文章中有什么错误或者建议修改的地方,欢迎留言纠正和回复
如果你喜欢本篇文章,不妨关注一下我们的公众号,每周更新两篇原创技术文档,都是干货