1. 程式人生 > >scrapyd用來方便控制scrapy爬蟲

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

scapyd生成檔案
    最後一步在所在的當前指令目錄中會出現空dbs、eggs、logs檔案,顧名思義這三個檔案是
後期部署scrapy爬蟲專案的管理以及記錄日誌的地方,所以初步可以看到scrapyd是一個
容器,或者更準確點就是需要在後臺開起來的服務,以下本人稱scrapyd

scrapyd服務
區分scrapy專案

  b) 安裝scrapyd-client

    這是一個部署scrapyscrapyd服務中的工具,

$ 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部署專案名]
scrapy.cfg配置檔案

 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