返回介绍

14.6 部署爬虫

发布于 2024-01-26 22:39:51 字数 5495 浏览 0 评论 0 收藏 0

知乎爬虫项目已经完成,下面我们需要将爬虫部署到服务器中。之前我们讲到的使用命令行或者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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文