scrapyd
Scrapyd 是一個運行 Scrapy 爬蟲的服務程序式散,它提供一系列 HπP 接口來幫助我們部署筋遭、啟動、 停止暴拄、刪除爬蟲程序漓滔。 Scrapyd 支持版本管理, 同時還可以管理多個爬蟲任務乖篷,利用它我們可以非常 方便地完成 Scrapy 爬蟲項目的部署任務調(diào)度响驴。
如果不使用分布式部署
1.如果采用上傳文件的方式部署代碼,我們首先將代碼壓縮撕蔼,然后采用 SFTP 或 FTP 的方式將 文件上傳到服務器豁鲤,之后再連接服務器將文件解壓,每個服務器都需要這樣配置鲸沮。
2.如果采用 Git 同步的方式部署代碼琳骡,我們可以先把代碼 Push 到某個 Git倉庫里,然后再遠程連 接各臺主機執(zhí)行 Pull 操作讼溺,同步代碼楣号,每個服務器同樣需要做一次操作。
scrapyd部署就很好的解決了這個問題
一怒坯,安裝
本地需要安裝scrapyd炫狱,scrapyd-client,curl
Scrapyd 的功能
Scrapyd 提供了一系列 HTTP 接口來實現(xiàn)各種操作剔猿。 用curl進行執(zhí)行
Scrapyd-Client 為了方便 Scrapy 項目的部署
將項目打包成 Egg 文件视译。
將’打包生成的 Egg 文件通過 addversion.json 接口部署到 Scrapyd 上。
在安裝scrapyd-client模塊是專門打包scrapy爬蟲項目到scrapyd服務中的归敬,進入虛擬環(huán)境酷含,執(zhí)行命令pip install scrapyd-client鄙早,安裝完成后,在虛擬環(huán)境的scripts中會出現(xiàn)scrapyd-deploy無后綴文件第美,這個scrapyd-deploy無后綴文件是啟動文件蝶锋,
在Linux系統(tǒng)下可以遠行陆爽,
在windows下是不能運行的什往,所以我們需要編輯一下使其在windows可以運行。新建一個scrapyd-deploy.bat文件慌闭,右鍵選擇編輯别威,輸入以下配置,注意:兩個路徑之間是空格
@echooffC:\Users\Faye\Envs\scrapy\Scripts\python C:\Users\Faye\Envs\scrapy\Scripts\scrapyd-deploy %*
image.png
在項目目錄下運行驴剔,這樣就顯示可以使用了省古。
curl命令的安裝
下邊這是個安裝方法,選擇對應版本然后配置環(huán)境變量就可以了
參考文檔:https://cloud.tencent.com/developer/news/359375
遠程服務器需要安裝:scrapyd
1.安裝完scrapyd丧失,需要允許任何IP遠程連接服務器豺妓,需要更改bind-ip。將默認的127.0.0.1改為0.0.0.0
配置文件位置:(需要根據(jù)個人虛擬環(huán)境配置的位置做相應改變)
vim /root/.virtualenvs/scrapy/lib/python3.5/site-packages/scrapyd/default_scrapyd.conf
image.png
重啟服務器布讹,開啟服務琳拭,然后在本地瀏覽器訪問試試。
2.瀏覽器訪問scrapyd訪問服務器錯誤
clipboard.png
原因Twisted版本與scrapy不匹配描验,回退版本
Scrapy==1.6.0 Twisted==18.9.0
pip install twisted==18.9.0
參考博客:https://blog.csdn.net/qq_29719097/article/details/89431234
二白嘁,本地訪問服務器
服務器開啟scrapyd服務
image.png
本地瀏覽器訪問訪問服務器
http://公網(wǎng)IP:6800
image.png
再點jobs
clipboard.png
三,部署scrapy項目
在scrapy項目目錄下膘流,有一個scrapy.cfg的配置文件:
image.png
把原先注釋掉的url那一行取消注釋絮缅,這個就是我們要部署到目標服務器的地址,
然后呼股,把[deploy]這里改為[deploy:demo]耕魄,這里是命名為demo,命名可以任意怎么都可以彭谁,只要能標識出來項目就可以屎开。
下邊的project 就是我們的工程名,到此配置文件更改完成马靠。
執(zhí)行打包命令: scrapyd-deploy 部署名稱 -p 項目名稱
scrapyd-deploy csdndeploy -p csdn-------------------運行結(jié)果------------------------------------Serverresponse(200):{"status":"ok","project":"csdn","spiders":1,"version":"1557761014","node_name":"iZhp3adenf04e7geqlzzgtZ"}
會在服務器生成三個文件目錄奄抽,使用xftp查看
image.png
curlhttp://localhost:6800/schedule.json-d project=項目名稱 -d spider=爬蟲名稱
curl http://39.104.xxx.xxx:6800/schedule.json -d project=csdn -d spider=csdn_spider------------------------運行結(jié)果------------------{"status":"ok","jobid":"d13cce92759411e9846a00163e005636","node_name":"iZhp3adenf04e7geqlzzgtZ"}
這是可以在本地流浪器查看爬蟲運行情況
四,命令
1. daemonstatus.json
這個接口負責查看Scrapyd當前的服務和任務狀態(tài)甩鳄。我們可以用命令來請求這個接口逞度,命令如下:
curl http://139.217.26.30:6800/daemonstatus.json
我們就會得到如下結(jié)果:
{"status":"ok", "finished":90, "running":9, "node_name":"datacrawl-vm", "pending":}
返回結(jié)果是JSON字符串,是當前運行狀態(tài)妙啃,代表當前已經(jīng)完成的Scrapy任務档泽,代表正在運行的Scrapy任務俊戳,代表等待被調(diào)度的Scrapyd任務,就是主機的名稱馆匿。
2. addversion.json
這個接口主要是用來部署Scrapy項目用的抑胎。我們首先將項目打包成Egg文件,然后傳入項目名稱和部署版本渐北。
我們可以用如下的方式實現(xiàn)項目部署:
curlhttp://120.27.34.25:6800/addversion.json -F project=wenbo -F version=first -F egg=@weibo.egg
在這里阿逃,? 代表添加一個參數(shù),同時我們還需要將項目打包成Egg文件放到本地赃蛛。
發(fā)出請求之后恃锉,我們可以得到如下結(jié)果:
{"status":"ok", "spiders":3}
這個結(jié)果表明部署成功,并且Spider的數(shù)量為3呕臂。
此部署方法可能比較煩瑣破托,后文會介紹更方便的工具來實現(xiàn)項目的部署。
3. schedule.json
這個接口負責調(diào)度已部署好的Scrapy項目運行歧蒋。
我們可以用如下接口實現(xiàn)任務調(diào)度:
curl http://120.27.34.25:6800/schedule.json -d project=weibo -d spider=weibocn
這里需要傳入兩個參數(shù)土砂,即Scrapy項目名稱,即Spider名稱谜洽。
返回結(jié)果如下:
{"status":"ok", "jobid":"6487ec79947edab326d6db28a2d86511e8247444"}
代表Scrapy項目啟動情況萝映,代表當前正在運行的爬取任務代號。
4. cancel.json
這個接口可以用來取消某個爬取任務褥琐。如果這個任務是狀態(tài)锌俱,那么它將會被移除;如果這個任務是狀態(tài)敌呈,那么它將會被終止贸宏。
我們可以用下面的命令來取消任務的運行:
curl http://120.27.34.25:6800/cancel.json -d project=weibo -d job=6487ec79947edab326d6db28a2d86511e8247444
這里需要傳入兩個參數(shù),即項目名稱磕洪,即爬取任務代號吭练。
返回結(jié)果如下:
{"status":"ok", "prevstate":"running"}
代表請求執(zhí)行情況,代表之前的運行狀態(tài)析显。
5. listprojects.json
這個接口用來列出部署到Scrapyd服務上的所有項目描述鲫咽。
我們可以用如下命令來獲取Scrapyd服務器上的所有項目描述:
curl http://120.27.34.25:6800/listprojects.json
這里不需要傳入任何參數(shù)。
返回結(jié)果如下:
{"status":"ok", "projects":["weibo","zhihu"]}
代表請求執(zhí)行情況谷异,是項目名稱列表分尸。
6. listversions.json
這個接口用來獲取某個項目的所有版本號,版本號是按序排列的歹嘹,最后一個條目是最新的版本號箩绍。
我們可以用如下命令來獲取項目的版本號:
curl http://120.27.34.25:6800/listversions.json?project=weibo
這里需要一個參數(shù),即項目的名稱尺上。
返回結(jié)果如下:
{"status":"ok", "versions":["v1","v2"]}
代表請求執(zhí)行情況材蛛,是版本號列表圆到。
7. listspiders.json
這個接口用來獲取某個項目最新版本的所有Spider名稱。
我們可以用如下命令來獲取項目的Spider名稱:
curl http://120.27.34.25:6800/listspiders.json?project=weibo
這里需要一個參數(shù)卑吭,即項目的名稱芽淡。
返回結(jié)果如下:
{"status":"ok", "spiders":["weibocn"]}
代表請求執(zhí)行情況,是Spider名稱列表豆赏。
8. listjobs.json
這個接口用來獲取某個項目當前運行的所有任務詳情挣菲。
我們可以用如下命令來獲取所有任務詳情:
curl http://120.27.34.25:6800/listjobs.json?project=weibo
這里需要一個參數(shù),即項目的名稱河绽。
返回結(jié)果如下:
{"status":"ok",
"pending":[{"id":"78391cc0fcaf11e1b0090800272a6d06", "spider":"weibocn"}],
"running":[{"id":"422e608f9f28cef127b3d5ef93fe9399", "spider":"weibocn", "start_time":"2017-07-12 10:14:03.594664"}],
"finished":[{"id":"2f16646cfcaf11e1b0090800272a6d06", "spider":"weibocn", "start_time":"2017-07-12 10:14:03.594664", "end_time":"2017-07-12 10:24:03.594664"}]}
代表請求執(zhí)行情況己单,代表當前正在等待的任務唉窃,代表當前正在運行的任務耙饰,代表已經(jīng)完成的任務。
9. delversion.json
這個接口用來刪除項目的某個版本纹份。
我們可以用如下命令來刪除項目版本:
curl http://120.27.34.25:6800/delversion.json -d project=weibo -d version=v1
這里需要一個參數(shù)苟跪,即項目的名稱,還需要一個參數(shù)蔓涧,即項目的版本件已。
返回結(jié)果如下:
{"status":"ok"}
代表請求執(zhí)行情況,這樣就表示刪除成功了元暴。
10. delproject.json
這個接口用來刪除某個項目篷扩。
我們可以用如下命令來刪除某個項目:
curl http://120.27.34.25:6800/delproject.json -d project=weibo
這里需要一個參數(shù),即項目的名稱茉盏。
返回結(jié)果如下:
{"status":"ok"}
代表請求執(zhí)行情況鉴未,這樣就表示刪除成功了。
以上接口是Scrapyd所有的接口鸠姨。我們可以直接請求HTTP接口铜秆,即可控制項目的部署、啟動讶迁、運行等操作连茧。
作者:飛吧_5966
鏈接:http://www.reibang.com/p/c7ef34fcf665
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處巍糯。