Scrapyd + Scrapyd-Client
需求
由于网站时常遭受黑客攻击, 现准备将手头一些攻击者的IP地址收集起来用做企业内部的威胁情报。既然要着手做威胁情报, 那么就避免不了通过一些网站进行数据的丰富化。要想简单省事儿, 当然是使用购买api账号的方式,不过有的api也很坑, 除非购买的是企业版, 否则个人版的api会受到请求速率的限制。所以这边只能依靠爬虫(Scrapy)来收集数据。但是采用了分布式爬虫, 就避免不了需要进行集中管理, 以及统一下等操作。下面就说下利用Scrapy官方提供的爬虫管理工具(Scrapyd)来满足以上的需求。
Scrapyd
Scrapyd是由Scrapy 官方提供的爬虫管理工具,使用它我们可以非常方便地上传、控制爬虫并且查看运行日志。
安装
1 | $ pip install scrapyd |
启动
1 | $ scrapyd |
Scrapyd是一个服务端,我们需要通过一个客户端(Scrapyd-Client)将爬虫项目发送到Scrapyd服务中去。这里先修改一下Scrapyd服务地址,默认Scrapyd启动是通过命令: Scrapyd
就可以直接启动,默认绑定的ip地址是127.0.0.1端口是:6800,这里为了其他主机可以访问,需将ip地址设置为0.0.0.0。
根据上图启动的信息, 可以看到默认配置文件是在/Users/canon/anaconda3/lib/python3.7/site-packages/scrapyd/
中。
1 | $ vim default_scrapyd.conf |
Scrapyd-Client
Scrapyd-Client可以用来部署Scrapy项目,它会帮我们把项目打包成egg文件,我们不用再动手调用add version.json
接口去部署到Scrapyd,操作简单。
安装
1 | $ pip install scrapyd-client |
配置
要部署Scrapy项目,我们首先需要修改项目的配置文件。首先切换至项目根目录, 会看到有一个scrapy.cfg
文件,它的内容如下:
1 | # Automatically created by: scrapy startproject |
这里需要配置一下deploy
部分。例如, 我们将项目部署到10.10.10.1的Scrapyd上,则修改内容如下:
1 | [deploy] |
这样我们再在scrapy.cf
g文件所在路径执行如下命令:
1 | $ scrapyd-deploy |
项目版本默认为当前时间戳。我们也可以指定项目版本,通过version
参数传递即可。例如:
1 | $ scrapyd-deploy --version 201912191114 |
注: 在Python3的Scrapyd 1.2.0版本中,版本号不能指定为带字母的字符串,它们必须为纯数字,否则会出现报错。
如果有多台主机,我们可以配置各台主机的别名,修改配置文件为:
1 | [deploy:vm1] |
在此统一配置多台主机,一台主机对应一组配置,在deploy
后面加上主机的别名即可。如果想将项目部署到IP为10.10.10.2的vm2主机,我们只需要执行如下命令:
1 | scrapyd-deploy vm2 |
如此一来,我们只需要在scrapy.cfg
文件中配置好各台主机的Scrapyd地址,然后调用scrapyd-deploy
命令加主机名称即可实现部署。
如果Scrapyd设置了访问限制,我们可以在配置文件中加入用户名和密码的配置,同时修改端口成Nginx代理端口。例如: 在第1章我们使用的是6801,那么这里就需要改成6801,修改如下:
1 | [deploy:vm1] |
通过加入username和password字段,我们就可以在部署时自动进行Auth验证,然后成功实现部署。
运行
1 | $ curl http://127.0.0.1:6800/schedule.json -d project=spider_ti -d spider=ti |
列出任务
1 | $ curl http://127.0.0.1:6800/listjobs.json?project=spider_ti | python -m json.tool |
列出项目
1 | $ curl http://127.0.0.1:6800/listprojects.json |
停止
1 | $ curl http://127.0.0.1:6800/cancel.json -d project=spider_ti -d job=838dec26222311ea8eb6a5eb893a35a5 |
删除
- 版本
1 | $ curl http://127.0.0.1:6800/delversion.json -d project=spider_ti -d version=1576735972 |
- 项目
1 | $ curl http://127.0.0.1:6800/delproject.json -d project=spider_ti |