Scrapyd一般做爲守護進程運行,它偵聽運行爬蟲的請求,併爲每一個請求生成一個進程,該進程基本上執行:scrapy crawl [myspider]
。html
Scrapyd還並行運行多個進程,將它們分配到max_proc
和max_proc_per_cpu
選項提供的固定數量的插槽中,啓動儘量多的進程來處理負載。python
除了調度和管理進程以外,Scrapyd還提供了一個JSON web服務來上載新的項目版本(做爲egg)和調度爬蟲。git
Scrapyd官方文檔 scrapyd.readthedocs.io/en/latest/i…github
劃重點:經過api方式多進程執行請求,在網頁端查看正在執行的任務,也能新建爬蟲任務,和終止爬蟲任務。web
pip install scrapyd
複製代碼
依賴的庫及版本:json
在項目目錄下,輸入scrapyd
便可運行,默認地址爲http://localhost:6800
api
scrapyd
複製代碼
官方詳細配置文檔說明:scrapyd.readthedocs.io/en/latest/c…bash
修改默認配置信息能夠在項目下新建一個scrapyd.conf
或者在scrapy.cfg
中增長[scrapyd]
:服務器
[scrapyd]
# 網頁和Json服務監聽的IP地址,默認爲127.0.0.1
bind_address = 127.0.0.1
# 監聽的端口,默認爲6800
http_port = 6800
# 是否打開debug模式,默認爲off
debug = off
# 每一個CPU可啓用的Scrapy 進程數,默認爲4
max_proc_per_cpu = 4
# 可啓用的最多進程數,默認爲0.若是未設置或者設爲0,則使用的最多進程數=CPU數量*max_proc_per_cpu
max_proc = 0
# 項目eggs生成目錄,默認爲項目目錄下eggs
eggs_dir = eggs
# 項目日誌生成目錄,默認爲項目目錄下logs,若是不想要生成日誌,能夠直接設置成空
logs_dir = logs
items_dir =
# 項目dbs生成目錄,默認爲項目目錄下dbs
dbs_dir = dbs
# 爬取的items存儲的文件夾(版本0.15.以上),默認爲空,不存儲。
items_dir =
# 每一個爬蟲保持的完成任務數,默認爲5.(版本0.15.以上,之前版本中爲logs_to_keep)
jobs_to_keep = 5
# 保持的完成任務進程數。默認爲100.(版本0.14.以上)
finished_to_keep = 100
# 輪訓請求隊列的時間間隔。默認爲5s,能夠爲浮點數
poll_interval = 5.0
# 啓動子進程的模塊。可使用自定義
runner = scrapyd.runner
# 返回可用於twisted的application,可繼承於Scrapyd添加和移除本身的組件和服務。 https://twistedmatrix.com/documents/current/core/howto/application.html查看更多
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
# twisted的web資源,表示到scrapyd的接口。Scrapyd包含一個帶有網站的界面,能夠提供對應用程序的web資源的簡單監視和訪問。此設置必須提供twisted web資源的根類。
webroot = scrapyd.website.Root
複製代碼
部署主要分爲兩步:app
egg
egg
經過Scrapyd的addversion.json
接口上傳到目標服務器官方的部署上傳接口文檔:scrapyd.readthedocs.io/en/latest/a…
小編推薦使用Scrapyd-client
中的scrapyd-deploy一步上傳,關於Scrapyd-client
介紹:
Scrapyd-client is a client for Scrapyd. It provides the general scrapyd-client and the scrapyd-deploy utility which allows you to deploy your project to a Scrapyd server.
劃重點:打包上傳一步到位。
Scrapy-client安裝
pip install scrapyd-client
複製代碼
部署:在項目目錄下,即scrapy.cfg所在的目錄下運行
scrapyd-deploy
複製代碼
正確的結果:
可能出現的錯誤:
(1)Deploy failed: <urlopen error [WinError 10061] 因爲目標計算機積極拒絕,沒法鏈接。
緣由:Scrapyd未啓動,須要先在項目目錄下運行scrapyd
啓動項目。
(2)'scrapyd-deploy' 不是內部或外部命令,也不是可運行的程序或批處理文件。
解決:
@echo off
python D:\Christina\AppData\Local\Programs\Python\Python36-32\Scripts\scrapyd-deploy %*
複製代碼
GET http://127.0.0.1:6800/daemonstatus.json
複製代碼
可查看當前的運行狀態:將要執行的任務數、運行中的任務數、已經結束的任務數。如我用postman請求返回的結果
推薦使用上面的scrapyd-deploy
發佈。
POST http://127.0.0.1:6800/addversion.json
複製代碼
參數:
調度爬蟲的運行,返回任務id。
POST http://127.0.0.1:6800/schedule.json
複製代碼
參數:
scrapy crawl [爬蟲名稱]
運行時的名稱。scrapy crawl [爬蟲名稱] -a accounts=testAdmin
後面-a所帶的參數,在Spider中可經過self.testAdmin來獲取值。小編經過postman訪問,以下,返回的jobid
可用於查看任務狀態,取消任務。
利用調度運行時返回的jobid
來取消。
POST http://localhost:6800/cancel.json
複製代碼
參數:
Scrapyd可管理多個Scrapy項目,可經過此方法獲取上傳的項目。
GET http://127.0.0.1:6800/listprojects.json
複製代碼
返回上傳的項目的版本列表,最後一個爲當前版本。
GET http://127.0.0.1:6800/listversions.json
複製代碼
參數:
返回指定版本,如不指定則爲最新版本的可用爬蟲列表。
GET http://127.0.0.1:6800/listspiders.json
複製代碼
參數:
獲取指定項目的將要執行的、正在運行的、已經結束的任務
GET http://127.0.0.1:6800/listjobs.json
複製代碼
參數:
刪除指定項目的指定版本,注意:當項目沒有其餘版本可使用時,項目也會被刪除。
POST http://127.0.0.1:6800/delversion.json
複製代碼
參數:
刪除一個項目及全部上傳的版本。
POST http://127.0.0.1:6800/delproject.json
複製代碼
參數:
本文結束啦--------
💡 更多好文歡迎關注個人公衆號~