python#使用scrapyd服務的方法與步驟
什麼是scrapyd
scrapyd = scrapy + deploying
把scrapy程序發佈到上面的一套由python寫好的服務
Scrapyd is an application for deploying and running Scrapy spiders.
It enables you to deploy (upload) your projects and control their spiders
using a JSON API.
言外之意: scrapyd
是一種服務,它能跟scrapy
開發的爬蟲程序配套使用的,其可以
通過發佈scrapy
程序並通過一套post
/get
請求指令(查看)來控制發佈到
scrapyd
服務上的scrapy
程序。
步驟
1. 準備工作 前期準備1
a) 安裝scrapyd
安裝好scrapyd,先開啓服務,
#安裝好scrapyd
$ pip install scrapyd
#開啓服務 默認都不需要加載
$ scrapyd
最後一步在所在的當前指令目錄中會出現空dbs、eggs、logs
文件,顧名思義這三個文件是
後期部署scrapy
爬蟲項目的管理以及記錄日誌的地方,所以初步可以看到scrapyd
是一個
容器,或者更準確點就是需要在後臺開起來的服務,以下本人稱scrapyd
爲scrapyd服務
以
區分scrapy
項目
b) 安裝scrapyd-client
這是一個部署scrapy
到scrapyd服務
中的工具,
$ pip install scrapyd-client
該安裝包擁有scrapyd-deploy 命令,是爬蟲項目發佈到srcapyd服務
的關鍵步驟,使用的前提是
必須要開啓scrapyd
服務,也就是第一步a)
這一步window需要額外處理,linux不需要
2. 發佈scrapy項目
到scrapyd服務
前期準備2
a) 創建爬蟲的通常命令
$ scrapy startproject sipdername
進入爬蟲的項目頂級目錄(之後操作都在該級目錄中),在指令所在目錄下會自動創建爬蟲項目模板,
同時會在頂層目錄中生成一個scrapy.cfg配置,這個配置本來如果你不發佈項目的話,基本上可以忽略。
該配置是發佈爬蟲項目到scrapyd服務
的重要配置。
b) 修改scrapy.cfg內容
註釋掉scrapy.cfg文件中的url(默認端口6800) 以及 [desploy:scrapyd部署項目名]
c) 查看服務以及項目是否正常
- 1.查看是否可以發佈到
scrapyd服務
$ scrapyd-deploy -l
正常情況下會顯示部署在`scrapyd服務`上的爬蟲項目,如果出錯,最大的可能性就是沒有開啓`scrapyd
服務`,因爲可以在任何目錄中開啓`scrapyd服務`,所以該指令是用來查找當前正在開啓的`scrapyd服務`
的
- 2.查看scrapy爬蟲項目中的爬蟲名
$ scrapy list
正常情況下會列出當前你的爬蟲項目,如果列不出來或者報錯,你先看下是哪裏語法有問題。
3. 正式發佈項目
以上2步驟都沒有問題
的話,就開始部署項目(部署這裏不需要關注爬蟲名)
$ scrapyd-deploy 部署項目名(cfg:中的部署項目名) -p 爬蟲項目名
說明
:
部署項目名
: 是指配置中的項目名稱看 2.b) 你自己設置的名稱,是scrapyd識別不同部署項目的名稱
項目名
: 這個是scrapy生成的項目名,也就是你的頂級項目目錄名稱
部署成功之後會在scrapy項目中生成兩個文件build和project.egg-info,分別是通過scrapyd-deploy
命令生成的編譯文件以及一些項目配置信息
4.大功告成
通過ip地址:6800端口進入看服務,這裏特別說明,一切運行都需要先開啓scrapyd服務
htt://ip地址:6800 訪問
5.一些scrapyd控制爬蟲的指令方法
可以通過 curl命令獲取6800相關的api接口對爬蟲進行遠程操作,比如開啓爬蟲
,停止爬蟲
等等
1)開啓
:項目名爲爬蟲的頂級項目名,非上面的部署名
curl http://ip地址:6800/schedule.json -d project=項目名 -d spider=爬蟲名稱
b)關閉
,job可以通過6800看
curl http://ip地址:6800/cancel.json -d project=項目名 -d job=232424434
c)刪除
不要的項目,確保該項目沒有運行的爬蟲
curl http://ip地址:6800/delproject.json -d project=項目名
d)查看
還有多少項目
curl http://ip地址:6800/listprojects.json
6.其他思考
以上可以看到通過curl命令就是獲取接口命令的方法,那麼我們很容易通過python中的
requests包來發送請求,來執行認爲,這個方法可以集成到django這樣的項目下做定時任務
1