scrapyd部署_第八章 第一节 scrapyd和scrapy-client
如果覺得文章對您產生幫助的話, 歡迎關注Python開發之路(微信公眾號: python-developer), 及時獲取更多教程
假設有我們做了一個項目是抓取很多網站(每個網站對應一個爬蟲), 需要分別部署到不同的服務器上(單臺扛不住), scrapy官方也提供了一種部署工具scrapyd。
這個工具是用來將爬蟲的項目的egg文件上傳到服務器上, 然后通過接口調用來啟動爬蟲. 上傳egg可以手動上傳, 但是比較麻煩。
所以有另外一個工具scrapy-client提供的scrapyd-deploy工具來進行egg文件的生成以及上傳到scrapyd服務器
另外我們在創建scrapy項目的時候, 有一個scrapy.cfg, 這個文件其實是為scrapy-client使用的
# scrapy crawl命令等使用的配置文件路徑 [settings] default = ccidcom.settings[deploy] # 在使用scrapyd-deploy進行生成egg和上傳的時候會使用 url = http://127.0.0.1:6800/ project = ccidcom基本的一個部署流程:
一、安裝scrapyd和scrapyd-client
pip install scrapyd pip install scrapyd-client==1.2.0a1scrapyd-client指定版本的原因是下載的默認版本是1.1.0, 缺少scrapyd-client命令, 會提示scrapyd-client command not found
二、啟動scrapyd
1. 配置文件
scrapyd會自動搜索配置文件的路徑, 以下就是指定的路徑, scrapyd會按照順序搜索文件
scrapyd無法通過命令行指定配置文件!!
- /etc/scrapyd/scrapyd.conf (Unix)
- c:scrapydscrapyd.conf (Windows)
- /etc/scrapyd/conf.d/* (in alphabetical order, Unix)
- scrapyd.conf
- ~/.scrapyd.conf (users home directory)
所以我們在項目目錄中創建一個scrapyd.conf.
這個配置文件里是不需要加引號的!
[scrapyd] # 服務監聽端口 http_port=6800 # 服務監聽ip, 默認是127.0.0.1 bind_address=0.0.0.0 # 啟動時的scrapy進程并發數, 如果沒有設置或者是0, 則是系統可用的cpu數量乘以`max_proc_per_cpu`的值, 默認是0 max_proc=0 # 每個cpu的scrapy進程并發數,默認是:4 max_proc_per_cpu=4 # 是否開啟調試模式, 默認是off, 如果開啟, 當調用`JSON API`發生錯誤時, 會返回詳細的錯誤信息 debug=off # scrapyd-deploy上傳的egg文件的保存路徑, 默認是scrapyd運行的當前目錄 eggs_dir=./eggs # scrapyd運行是的數據庫路徑, 包括爬蟲隊列信息 dbs_dir=./dbs # Scrapy運行時的日志保存路徑, 如果禁用則設置為空 logs_dir=./logs # Scrapy運行時產生的item的數據保存路徑, 因為一般都是導出或者保存到數據庫, 所以這個建議禁用, 默認是禁用狀態 items_dir= # 每個爬蟲運行完成后的logs和items數據保存數量, 也就是假設同一個爬蟲運行到第六次, 則會刪除前5次爬蟲產生的數據, 這個配置項之前是`logs_to_keep` jobs_to_keep=5 # 保存在啟動器中的已完成的進程數量 finished_to_keep=100 # 輪訓隊列的秒數, 也就是多長時間檢查一下爬蟲隊列 poll_interval=5 # 啟動子進程的模塊 # runner= scrapyd.runner # scrapyd啟動的app應用文件 # application=scrapyd.app.application # scrapyd資源跟目錄 # webroot = scrapyd.website.Root # 節點的展示名稱, 默認是${socket.gethostname()} # node_name=# 以下是調用接口的url路徑和對應的scrapyd類, 熟悉源碼可以自己進行開發 [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.DaemonStatus2. 啟動scrapyd
scrapyd運行成功以后提示
2019-12-24T16:49:54+0800 [-] Loading /private/var/www/test/.venv/lib/python3.6/site-packages/scrapyd/txapp.py... 2019-12-24T16:49:54+0800 [-] Scrapyd web console available at http://0.0.0.0:6800/ # 可用的請求地址 2019-12-24T16:49:54+0800 [-] Loaded. 2019-12-24T16:49:54+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 19.10.0 (/private/var/www/test/.venv/bin/python3.6 3.6.5) starting up. 2019-12-24T16:49:54+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.selectreactor.SelectReactor. 2019-12-24T16:49:54+0800 [-] Site starting on 6800 # 監聽端口 2019-12-24T16:49:54+0800 [twisted.web.server.Site#info] Starting factory <twisted.web.server.Site object at 0x103a50cc0> 2019-12-24T16:49:54+0800 [Launcher] Scrapyd 1.2.1 started: max_proc=48, runner='scrapyd.runner' # 啟動runner2. 查看web界面
在瀏覽器中輸入http://127.0.0.1:6800, 可以看到scrapyd服務器的web界面
Jobs: 是所有調用過的爬蟲的任務列表
Logs: 所有任務產生的日志
三、scrapyd-deploy部署爬蟲
scrapyd-deploy是在爬蟲項目里運行的, 也就是和scrapy.cfg文件同級的目錄
1. 修改scrapy.cfg文件
如果有多個爬蟲目標服務器, 可以增加[deploy:]區域
[settings] default = ccidcom.settings[deploy:ccid] # 默認是[deploy], ccid這里指定的是目標服務器的名稱 url = http://127.0.0.1:6800/ # 目標服務器的url和端口 project = ccidcom # 項目名稱2. 生成egg文件并且上傳到scrapyd服務器
scrapyd-deploy [目標服務器名稱] -p [項目名稱] scrapyd-deploy ccid -p ccidcom如果成功, 會返回以下信息
Packing version 1577178235 Deploying to project "ccidcom" in http://127.0.0.1:6800/addversion.json Server response (200): {"node_name": "bogon", "status": "ok", "project": "ccidcom", "version": "1577178235", "spiders": 1}意思就是發布到指定的爬蟲目標服務器, 發布上去的spiders數量是1, status是狀態,project是項目名
同樣的, 在scrapyd服務器上也會輸出以下信息
2019-12-24T17:03:56+0800 [twisted.python.log#info] "127.0.0.1" - - [24/Dec/2019:09:03:55 +0000] "POST /addversion.json HTTP/1.1" 200 100 "-" "Python-urllib/3.6"3. scrapyd-client的一些操作
1. 列出當前的項目
scrapyd-client projects scrapyd-client -t http://127.0.0.1:6800 projects-t: 指定scrapyd的地址
2. 列出指定項目的爬蟲列表
scrapyd-client spiders -p [項目名稱] scrapyd-client spiders -p ccidcom scrapyd-client -t http://127.0.0.1:6800 spiders -p ccidcom得到輸出
ccidcom: # 項目名稱ccid # 爬蟲名3. 運行爬蟲
scrapyd-client schedule -p [項目名] [爬蟲名] scrapyd-client schedule -p ccidcom ccid scrapyd-client -t http://127.0.0.1:6800 schedule -p ccidcom ccid可以看到任務的名稱
ccidcom / ccid => 6cab8f8c262d11ea8935acde48001122這時我們查看scrapyd的web管理界面, 也可以看到所有的任務
Pending: 是等待執行的任務
Running: 正在運行的任務
Finished: 已經運行完成的任務
4. scrapyd-deploy的其他用法
1. 部署指定項目到所有的爬蟲目標服務器
scrapyd-deploy -a -p <project>2. 指定項目的版本
默認scrapyd-client使用當前時間戳作為版本號, 我們可以自己指定版本
scrapyd-deploy <target> -p <project> --version <version>如果是使用Mercurial或者Git, 也可以直接使用git或者Mercurial的修訂版本號作為版本號
# scrapy.cfg [deploy:target] ... version = HG3. 列出所有的可用的scrapyd服務器列表
scrapyd-deploy -l四、scrapyd服務器的json API
爬蟲的啟動, 暫停以及查看, 都是通過scrapyd提供的json api來實現的. 其實scrapyd-client的命令, 其實也是調用的scrapyd的json api
1. 獲取服務器負載信息
curl http://localhost:6800/daemonstatus.json {"status": "ok", "running": "0", # 正在運行中的爬蟲數量"pending": "0", # 等待運行的爬蟲數量"finished": "0", # 已完成的爬蟲數量"node_name": "node-name" # 服務器節點名稱 }2. 部署或更新服務器上的爬蟲
scrapyd-deploy 部署使用的其實就是這個命令
這個是post請求
curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F egg=@myproject.eggproject: 項目名稱
version: 版本號
egg: 項目的egg文件
{"status": "ok", "spiders": 3}3. 調用爬蟲
post請求
$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1project: 項目名
spider: 調用的爬蟲名
setting:指定配置項, 多個可以使用A=1&B=2的方式
arg1=vale1: 指定調用爬蟲時傳遞的參數
返回值:
jobid是任務的id
{"status": "ok", "jobid": "6487ec79947edab326d6db28a2d86511e8247444"}4. 取消任務
post請求, 如果任務是等待狀態, 則直接刪除, 如果是運行中, 則直接停止爬蟲
curl http://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444project: 項目名
job: 任務id
5. 列出所有項目
curl http://localhost:6800/listprojects.json{"status": "ok", "projects": ["myproject", "otherproject"]}6. 查看指定項目的版本
按照版本號順序返回, 最后一個是最新的版本
curl http://localhost:6800/listspiders.json?project=myprojectproject: 項目名
{"status": "ok", "versions": ["r99", "r156"]}7. 列出指定項目的所有爬蟲
curl http://localhost:6800/listspiders.json?project=myprojectproject: 項目名
_version: 版本號
{"status": "ok", "spiders": ["spider1", "spider2", "spider3"]}8. 列出所有任務
curl http://localhost:6800/listjobs.json?project=myprojectproject: 項目名
{"status": "ok","pending": [{"id": "78391cc0fcaf11e1b0090800272a6d06","spider": "spider1"}],"running": [{"id": "422e608f9f28cef127b3d5ef93fe9399","spider": "spider2","start_time": "2012-09-12 10:14:03.594664"}],"finished": [{"id": "2f16646cfcaf11e1b0090800272a6d06", # 任務id"spider": "spider3", # 爬蟲名"start_time": "2012-09-12 10:14:03.594664", # 開始時間"end_time": "2012-09-12 10:24:03.594664" # 結束時間}] }9. 刪除指定版本號
post請求
curl http://localhost:6800/delversion.json -d project=myproject -d version=r99project: 項目名
version: 要刪除的版本號
10. 刪除項目
post請求
curl http://localhost:6800/delproject.json -d project=myprojectproject: 項目名
{"status": "ok"}五、其他問題
1. 請求認證
如果我們的服務是部署在公網上的話, 意外被人知道, 上傳爬蟲等, 可能有一定的安全風險。
我們可以使用nginx做代理轉發, 開啟nginx的basic auth
然后修改scrapy.cfg文件
[deploy:example] url = http://scrapyd.example.com/api/scrapyd username = scrapy password = secret指定username和password即可
總結
以上是生活随笔為你收集整理的scrapyd部署_第八章 第一节 scrapyd和scrapy-client的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招聘人才广告宣传词30句
- 下一篇: 乔安监控云存储能存多长时间_干货 | 监