Scrapyd使用詳解

前言

Scrapyd一般做爲守護進程運行,它偵聽運行爬蟲的請求,併爲每一個請求生成一個進程,該進程基本上執行:scrapy crawl [myspider]html

Scrapyd還並行運行多個進程,將它們分配到max_procmax_proc_per_cpu選項提供的固定數量的插槽中,啓動儘量多的進程來處理負載。python

除了調度和管理進程以外,Scrapyd還提供了一個JSON web服務來上載新的項目版本(做爲egg)和調度爬蟲。git

Scrapyd官方文檔 scrapyd.readthedocs.io/en/latest/i…github

劃重點:經過api方式多進程執行請求,在網頁端查看正在執行的任務,也能新建爬蟲任務,和終止爬蟲任務。web

使用詳解

安裝

pip install scrapyd
複製代碼

依賴的庫及版本:json

  • Python 2.7 or above
  • Twisted 8.0 or above
  • Scrapy 1.0 or above
  • six

啓動

在項目目錄下,輸入scrapyd便可運行,默認地址爲http://localhost:6800api

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
複製代碼

正確的結果:

1568024653.jpg

可能出現的錯誤

(1)Deploy failed: <urlopen error [WinError 10061] 因爲目標計算機積極拒絕,沒法鏈接。

1568020355.jpg

緣由:Scrapyd未啓動,須要先在項目目錄下運行scrapyd啓動項目。

(2)'scrapyd-deploy' 不是內部或外部命令,也不是可運行的程序或批處理文件。

1568023188.jpg

解決:

  • 進入安裝python 的位置的Scripts文件夾

1568022580.jpg

  • 建立文件 scrapyd-deploy.bat,用文本編輯器打開,添加以下內容並保存。注意:python後面的改成本身電腦下Scripts目錄下的scrapyd-deploy
@echo off
python D:\Christina\AppData\Local\Programs\Python\Python36-32\Scripts\scrapyd-deploy %*
複製代碼

相關API使用

查看服務進程狀態
GET&emsp;http://127.0.0.1:6800/daemonstatus.json
複製代碼

可查看當前的運行狀態:將要執行的任務數、運行中的任務數、已經結束的任務數。如我用postman請求返回的結果

1568025204.jpg

項目發佈版本

推薦使用上面的scrapyd-deploy發佈。

POST http://127.0.0.1:6800/addversion.json
複製代碼

參數:

  • project(string, required),項目名稱;
  • version(string, required),項目版本;
  • egg (file, required),打包的項目文件。
調度爬蟲

調度爬蟲的運行,返回任務id。

POST http://127.0.0.1:6800/schedule.json
複製代碼

參數:

  • project (string, required),項目名稱。
  • spider (string, required),爬蟲名稱,即 Spider下的name屬性指定的。即scrapy crawl [爬蟲名稱]運行時的名稱。
  • setting (string, optional),運行時的設置文件,默認爲項目下settings.py。
  • jobid (string, optional),任務id,不指定則爲默認生成的UUID。
  • _version (string, optional),運行的項目的版本。
  • 任何其餘的參數都被傳遞給爬蟲的屬性,即scrapy crawl [爬蟲名稱] -a accounts=testAdmin後面-a所帶的參數,在Spider中可經過self.testAdmin來獲取值。

小編經過postman訪問,以下,返回的jobid可用於查看任務狀態,取消任務。

1568027464.jpg

取消任務

利用調度運行時返回的jobid來取消。

POST http://localhost:6800/cancel.json
複製代碼

參數:

  • project (string, required),項目名稱。
  • job (string, required),任務id。

1568027719.jpg

獲取上傳的項目

Scrapyd可管理多個Scrapy項目,可經過此方法獲取上傳的項目。

GET http://127.0.0.1:6800/listprojects.json
複製代碼

1568027932.jpg

獲取項目的版本

返回上傳的項目的版本列表,最後一個爲當前版本。

GET http://127.0.0.1:6800/listversions.json
複製代碼

參數:

  • project (string, required),項目名稱。

1568028221.jpg

獲取項目的爬蟲列表

返回指定版本,如不指定則爲最新版本的可用爬蟲列表。

GET http://127.0.0.1:6800/listspiders.json
複製代碼

參數:

  • project (string, required),項目名稱。
  • _version (string, optional),運行的項目的版本。

1568028369.jpg

獲取任務列表(Scrapyd 0.15版本以上)

獲取指定項目的將要執行的、正在運行的、已經結束的任務

GET http://127.0.0.1:6800/listjobs.json
複製代碼

參數:

  • project (string, required),項目名稱。

1568028513.jpg

刪除項目版本

刪除指定項目的指定版本,注意:當項目沒有其餘版本可使用時,項目也會被刪除。

POST http://127.0.0.1:6800/delversion.json
複製代碼

參數:

  • project (string, required) 項目名稱。
  • version (string, required) 要刪除項目的版本

1568083595.jpg

刪除項目

刪除一個項目及全部上傳的版本。

POST http://127.0.0.1:6800/delproject.json
複製代碼

參數:

  • project (string, required) 項目名稱。

1568083805.jpg

本文結束啦--------

原文連接

💡 更多好文歡迎關注個人公衆號~

公衆號
相關文章
相關標籤/搜索