scrapyd官方文档
http://scrapyd.readthedocs.io/en/stable/overview.html
首先,我们来了解一下什么是scrapyd
- scrapyd是运行scrapy爬虫的服务程序,它支持以http命令方式发布、删除、启动、停止爬虫程序。而且scrapyd可以同时管理多个爬虫,每个爬虫还可以有多个版本。
为什么要使用scrapyd
- 1、可以避免爬虫源码被看到。
- 2、有版本控制。
- 3、可以远程启动、停止、删除。
怎样安装scrapyd
- 1,安装scrapyd
主要有两种安装方式:
pip install scrapyd (安装的版本可能不是最新版本)
从 https://github.com/scrapy/scrapyd 中下载源码,
运行python setup.py install 命令进行安装 - 2, 安装 scrapyd-deploy
主要有两种安装方式:
pip install scrapyd-client(安装的版本可能不是最新版本)
从 http://github.com/scrapy/scrapyd-client 中下源码,
运行python setup.py install 命令进行安装。
scrapy的使用
- 第一步:
在服务端 启动 scrapyd,运行scrapyd命令即可
启动成功后,在浏览器中可以通过服务端的IP 和 默认端口号6800进行访问,界面如图所示 - 第二步:
发布爬虫工程到 scrapyd
首先配置 scrapy爬虫中的 scrapy.cfg
- 1.首先去掉url前面的注释符号,url是scrapyd服务器的网址
- 2.然后project=tenCent为项目名称,可以随意起名
-
3.修改[deploy]为[deploy:100],表示把爬虫发布到名为100的爬虫服务器上,一般在需要同时发布爬虫到多个目标服务器时使用
添加爬虫工程
命令如下:
Scrapyd-deploy <tartget> -p <project> --version <version>
参数解释:
- Target:deploy后面的名称。
- Project:自行定义名称,跟爬虫的工程名字无关。
- Version:自定义版本号,不写的话默认为当前时间戳。
发布成功之后 在浏览器界面刷新 即可看到 新添加的 爬虫工程
以上在scrapyd官方文档中 都有说明,如有不明,请查看官方文档
**
重点来了,下面是scrapyd 提供的API
**
- 启动爬虫任务:
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider_name
- 停止爬虫任务:
curl http://localhost:6800/cancel.json -d project=spider_name -d job=job_id
- 检查服务的负载状态
curl http://localhost:6800/daemonstatus.json
- 获取上传到此Scrapy服务器的项目列表
curl http://localhost:6800/listprojects.json
**更多API可以查看官网:**https://scrapyd.readthedocs.io/en/latest/api.html
…
其实 以上这些难记的 API 只需要一个简单的 Python脚本 就可以搞定
import requests
class ScrapyApi(object):
def __init__(self):
self.ip = "localhost"
self.port = 6800
#启动爬虫任务方法
def schedule(self,project,spider):
self.url = "http://%s:%s/schedule.json"%(self.ip,self.port)
self.data = {
"project":project,
"spider":spider
}
return requests.post(url=self.url, data=self.data).json()
#这是停止爬虫的方法
def cancel(self,project,job_id):
self.url = "http://%s:%s/cancel.json"%(self.ip,self.port)
self.data = {
"project":project,
"job_id":job_id
}
return requests.post(url = self.url, data=self.data).json()
。。。
if __name__=="__main__":
sa = ScrapydApi()
sa.schedule("项目名","爬虫名")
sa.cancel("项目名","job_id")
。。。
当然 还有其他办法,shell脚本 也是一个不错的选择
或者 Python的 os模块,使用 os.system能直接调用 shell 命令,也能轻松实现。选择适合自己的方法就好了