14.6 部署爬虫
知乎爬虫项目已经完成,下面我们需要将爬虫部署到服务器中。之前我们讲到的使用命令行或者API启动方式,略显粗糙,仅适合个人调试,不适合应用到实际的工程项目中,我们需要一种灵活稳定的方式启动和控制爬虫。
14.6.1 Scrapyd
Scrapy官方为我们提供了一个部署爬虫非常有用的工具Scrapyd。Scrapyd是运行Scrapy爬虫的服务程序,它支持以HTTP命令方式通过JSON API进行发布、删除、启动、停止爬虫程序的操作,而且Scrapyd可以同时管理多个爬虫,每个爬虫还可以有多个版本,也是部署分布式爬虫的有效手段。官方文档:http://scrapyd.readthedocs.io/en/latest/ 。
1.安装Scrapyd
主要有两种安装方式:
·pip install scrapyd,安装的版本可能不是最新版本。
·从https://github.com/scrapy/scrapyd 中下载源码,运行python setup.py install命令进行安装。
2.启动Scrapyd
在命令行中输入scrapyd,即可完成启动,如图14-8所示。默认情况下scrapyd运行后会侦听6800端口。
图14-8 启动Scrapyd
在浏览器中输入:http://127.0.0.1:6800/ ,可以打开Scrapyd界面,如图14-9所示。
图14-9 Scrapyd界面
3.Scrapyd API介绍
Scrapyd主要支持10种操作方式:
·获取Scrapyd状态:http://127.0.0.1:6800/daemonstatus.json 。GET请求方式。响应类似{”status“:“ok”,“running”:“0”,“pending”:“0”,“finished”:“0”,“node_name”:“node-name”} 获取项目列表:http://127.0.0.1:6800/listprojects.json ,GET请求方式。响应类似{“status”:“ok”,“projects”:[“myproject”,“otherproject”]}。
·获取项目下已发布的爬虫列表:http://127.0.0.1:6800/listspiders.jsonproject=myproject 。GET请求方式,参数为项目名称myproject。响应类似{“status”:“ok”,“spiders”:[“spider1”,“spider2”,“spider3”]}。
·获取已发布的爬虫版本列表:http://127.0.0.1:6800/listversions.jsonproject=myproject 。GET请求方式,参数为项目名称myproject。响应类似{“status”:“ok”,“versions”:[“r99”,“r156”]}。
·获取爬虫运行状态:http://127.0.0.1:6800/listjobs.jsonproject=myproject 。GET请求方式,参数为项目名称myproject。响应类似{“status”:“ok”,“pending”:[{“id”:“78391cc0fcaf11e1b0090800272a6d06”,“spider”:“spider1”}],“running”:[{“id”:“422e608f9f28cef127b3d5ef93fe9399”,“spider”:“spider2”,“start_time”:“2012-09-1210:14:03.594664”}],“finished”:[{“id”:“2f16646cfcaf11e1b0090800272a6d06”,“spider”:“spider3”,“start_time”:“2012-09-1210:14:03.594664”,“end_time”:“2012-09-1210:24:03.594664”}]}
·启动服务器上某一爬虫:http://127.0.0.1:6800/schedule.json 。POST请求方式,参数为“project”:myproject,“spider”:myspider,myproject为项目名称,myspider为爬虫名称。响应类似:{“status”:“ok”,“jobid”:“6487ec79947edab326d6db28a2d86511e8247444”}
·删除某一版本爬虫:http://127.0.0.1:6800/delversion.json 。POST请求方式,参数为“project”:myproject,“version”:myversion,myproject为项目名称,version为爬虫版本。
·删除某一工程,并将工程下各版本爬虫一起删除:http://127.0.0.1:6800/delproject.json 。POST请求方式,参数为“project”:myproject,myproject为项目名称。响应类似:{“status”:“ok”}
·给工程添加版本,如果工程不存在则创建:http://127.0.0.1:6800/addversion.json 。POST请求方式,参数为“project”:myproject,“version”:myversion,myproject为项目名称,version为项目版本。响应类似{“status”:“ok”,“spiders”:3}。
·取消一个运行的爬虫任务:http://127.0.0.1:6800/cancel.json 。POST请求方式,参数为“project”:myproject,“job”:jobid,myproject为项目名称,jobid为任务的id。响应类似{“status”:“ok”,“prevstate”:“running”}
大家只需要使用request发送请求,解析json响应就可以灵活地控制爬虫。但是上述API中还少了如何发布爬虫程序到Scrapyd服务中的功能,那是因为额外提供了Scrapyd-client发布工具。
14.6.2 Scrapyd-client
Scrapyd-client是一个专门用来发布scrapy爬虫的工具,安装该程序之后会自动在Python安装目录下scripts文件夹中生成scrapyd-deploy工具,其实类似于Python脚本,可以直接使用python scrapyd-deploy的方式运行。
1.安装Scrapyd-client
主要有两种安装方式:
·pip install Scrapyd-client,安装的版本可能不是最新版本。
·从https://github.com/scrapy/scrapyd-client 中下载源码,运行python setup.py install命令进行安装。
2.使用Scrapyd-client
安装完成后,将scrapyd-deploy拷贝到爬虫项目目录下,与scrapy.cfg在同一级目录。下面我们需要修改scrapy.cfg文件,默认生成的scrapy.cfg文件内容如下:
[settings] default = zhihuCrawl.settings [deploy] # url = http://127.0.0.1:6800/ project = zhihuCrawl
首先去掉url前的注释符号,url是scrapyd服务器的网址,project=zhihuCrawl为项目名称,可以随意起。修改[deploy]为[deploy:100],表示把爬虫发布到名为100的爬虫服务器上,一般在需要同时发布爬虫到多个目标服务器时使用。修改如下:
[settings] default = zhihuCrawl.settings [deploy:100] url = http://127.0.0.1:6800/ project = zhihuCrawl
配置完成后,就可以使用scrapyd-deploy进行爬虫的发布了,命令如下:
scrapyd-deploy <target> -p <project> --version <version>
参数解释:
·target:deploy后面的名称。
·project:自行定义名称,跟爬虫的工程名字无关。
·version:自定义版本号,不写的话默认为当前时间戳。
下面将命令行切换到工程目录下,运行:python scrapyd-deploy 100-p zhihu--version ver2016011,如图14-10所示。
发布完成后根据API发送启动爬虫的请求,爬虫就可以正常工作了。爬取一段时间后,数据存储效果如图14-11所示。
图14-10 发布爬虫
图14-11 数据存储
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论