Scrapyd的工程管理

2022-06-20 22:54:13 字數 2269 閱讀 4231

引用摘自《python絕技 蟲術》第三章

一、三大環境

開發環境、測試環境與生產環境,其關係如下圖所示:

graph lr

id1((測試環境))--測試-->id2((開發環境))

id2--構建-->id3((生產環境))

id3--執行-->id1

開發環境的側重點是增加開發效率,scrapy命令列工具就是一套針對爬蟲開發與維護的工具。只要細細研讀每個指令的作用,就會發現它們只不過是將一系列的人工操作指令通過乙個指令一次性地完成罷了,其本質上並沒有什麼很炫酷的功能。

就scrapy框架而言,要做到三大環境分離並不複雜,只需要在原有的scrapy框架中結合scrapyd與scrapyd-client工具就可以輕鬆地構建開發、測試與生產一體化的環境。具體實現邏輯如下:

開發與測試環境都基於scrapy,開發環境中以scrapyd-client作為自動化部署工具,而生產環境中將以scrapyd工具為宿主,向外部提供生產環境的管理介面。

二、scrapyd

官方文件介紹:

scrapyd是用於部署和執行scrapy spider的應用程式。它使你能夠使用json api部署(上傳)專案並控制專案的spide。官方文件

1. 使用scrapyd與直接執行爬蟲scrapy crawl myspider的區別:

scrapyd同樣是通過上面的命令啟動執行爬蟲的,不同的是它提供乙個json web service監聽請求,我們可以從任何一台能連線到伺服器的pc傳送請求來執行爬蟲,或者停止正在執行的爬蟲。甚至,我們可以使用它提供的api上傳新的爬蟲而不必登入到伺服器上進行操作。

可以將scrapyd看作scrapy的乙個web包裝,通過scrapyd公布的restful api可以讓scrapy專案變得具有更好的相容性,我們就可以使用任何一種語言或者工具像scrapyd提供的web位址發起請求,從而控制scrapy中爬蟲的行為。有了scrapyd作為web的宿主,scrapy被部署在網路的任何地方,都可以方便地通過乙個http的客戶端對其進行控制。

除此之外,scrapyd具有一項特性,十分適用於建立scrapy的生產環境,那就是發行版本控制。scrapyd的版本控制功能也是通過restful api提供的,這樣使得爬蟲的迭代與**的交付變得非常容易。

2. 使用scrapyd

工程的部署

要完整地將專案部署到伺服器上,需要通過scrapyd的addversion.json服務將python編譯器生成egg檔案(也就是python獨有的包描述資訊)並上傳到伺服器。我們可以以手工方式將檔案上傳到伺服器,但是最簡單的方法是通過scrapyd-deploy軟體工具包中附帶的scrapyd-client客戶端來完成這一項工作。

restful api
scrapyd的web介面比較簡單,主要用於監控,所有的排程工作全部依靠web介面實現。也就是說,通過任意可以發出http請求的工具(如urllib)向scrapyd伺服器指定的位址發出請求以獲得具體的服務。如果在命令列中呼叫scrapyd上的功能,可以通過curl工具來實現。

scrapyd提供的restful api一覽表

urihttp方法

說明daemonstatus.json

get檢查scrapyd的執行狀態

addversion.json

post

向scrapyd增加乙個專案版本,如果專案不存在,則自動建立乙個新的專案

schedule.json

post

載入執行指定的蜘蛛

cancel.json

post

終止蜘蛛的作業

listprojects.json

get獲取當前的scrapyd伺服器中所有的已上傳專案列表

listversions.json

get獲取專案中可用的版本列表。版本會按順序排列,最後乙個為當前正在使用的版本

listspiders.json

get獲取當前版本中可用的蜘蛛列表

listjobs.json

get獲取專案中待定、正在執行或者已完成的作業列表

delversion.json

post

刪除專案中指定的版本

delproject.json

post

刪除指定專案及其所有已上傳的版本

Scrapyd的安裝與部署

本文的目的在於介紹 scrapyd 的安裝與使用,為節省篇幅,scrapy 的安裝與 scrapy爬蟲的開發在本文不予介紹,預設已經開發完成,當然,本機的python環境變數也是配置好的。筆者所用的環境如下 系統 windows 10 python python 3.6.3 scrapy scrap...

FastAPI 工程管理 一 工程目錄管理

我們在構建複雜應用的時候,通常會對工程目錄進行合理組織。fastapi提供了便利的工具來對應用進行結構化管理,這基本等同於flask的blueprints功能。init py main.py routers init py items.py users.py fastapi可以基於apirouter...

scrapyd部署爬蟲遇到的問題

1.windows下 scrapyd deploy無字尾檔案不能啟動 執行命令pip install scrapy client,安裝完成後,在虛擬環境的scripts中會出現scrapyd deploy無字尾檔案,這個scrapyd deploy無字尾檔案是啟動檔案,在linux系統下可以執行,在...