scrapyd用來方便控制scrapy爬蟲
python#使用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 訪問
可以通過 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