1. 程式人生 > >雲伺服器部署scrapyd爬蟲

雲伺服器部署scrapyd爬蟲

Scrapyd部署爬蟲專案

1、新建虛擬環境(方便管理),並在虛擬環境中安裝scrapy專案需要使用到的包。

建立虛擬環境:

python3 -m venv scrapySpider

查詢:which python

啟用虛擬環境: 

source scrapySpider/bin/activate

刪除虛擬環境: rm -rf venv

2、安裝scrapyd模組,scrapyd模組是專門用於部署scrapy專案的,可以部署和管理scrapy專案。

pip install scrapyd

3、輸入scrapyd啟動scrapyd服務、瀏覽器輸入127.0.0.1:6800 即可檢視。

這裡寫圖片描述

這裡寫圖片描述

遠端連線需要修改

所以這個時候就要改一下scrapyd配置*\Lib\site-packages\scrapyd中的default_scrapyd.conf:

將bind_address = 127.0.0.1改為bind_address = 0.0.0.0

這裡寫圖片描述

4、如果連線成功先關閉服務,可以看到此時虛擬環境中多出了一個dbs資料夾,是用來存放爬蟲專案的資料檔案。

這裡寫圖片描述

5、安裝scrapyd-client模組。

scrapyd-client模組是專門打包scrapy爬蟲專案到scrapyd服務中的,

進入虛擬環境,執行命令pip install scrapyd-client

安裝完成後,在虛擬環境的scripts中會出現scrapyd-deploy無後綴檔案,這個scrapyd-deploy無後綴檔案是啟動檔案。

6、進入虛擬環境,進入到你的爬蟲專案中,進入帶有scrapy.cfg檔案的目錄,執行scrapyd-deploy,測試scrapyd-deploy是否可以執行,如果出現以下則正常

這裡寫圖片描述

7、開啟爬蟲專案中的scrapy.cfg檔案,這個檔案就是給scrapyd-deploy使用的,將url這行程式碼解掉註釋,並且設定你的部署名稱。

這裡寫圖片描述

8、再次執行scrapyd-deploy -l 啟動服務,可以看到設定的名稱.

這裡寫圖片描述

9、開始打包前,執行一個命令:scrapy list ,這個命令執行成功說明可以打包了,如果沒執行成功說明還有工作沒完成。

這裡寫圖片描述

10、執行打包命令: scrapyd-deploy 部署名稱 -p 專案名稱

如:scrapyd-deploy bk -p baike

這裡寫圖片描述
不用管,多提交幾次,直到你的egg資料夾中有專案即可

11、部署scrapy

curl http://localhost:6800/schedule.json  -d project=專案名稱 -d spider=爬蟲名稱

如:

curl http://localhost:6800/schedule.json  -d project=baike -d spider=mybaike

可以去網頁中127.0.0.1::6800檢視爬蟲執行狀態

這裡寫圖片描述

12、停止爬蟲

curl http://localhost:6800/cancel.json  -d project=專案名稱 -d job=執行ID

13、刪除scrapy專案

注意:一般刪除scrapy專案,需要先執行命令停止專案下已在遠行的爬蟲

curl http://localhost:6800/delproject.json -d project=scrapy專案名稱

14、檢視有多少個scrapy專案在api中

curl http://localhost:6800/listprojects.json

15、檢視指定的scrapy專案中有多少個爬蟲

curl http://localhost:6800/listspiders.json?project=專案名稱

16、如果我們想用 Python 程式來控制一下呢?我們還要用 requests 庫一次次地請求這些 API ?這就太麻煩了吧,所以為了解決這個需求,Scrapyd-API 又出現了,

有了它我們可以只用簡單的 Python 程式碼就可以實現 Scrapy 專案的監控和執行:

from scrapyd_api import ScrapydAPI
scrapyd = ScrapydAPI('http://localhost:6800')
scrapyd.list_jobs('project_name')

返回結果:

 {
        'pending': [
        ],
        'running': [
            {
                'id': u'14a65...b27ce',
                'spider': u'spider_name',
                'start_time': u'2018-01-17 22:45:31.975358'
            },
        ],
        'finished': [
            {
                'id': '34c23...b21ba',
                'spider': 'spider_name',
                'start_time': '2018-01-11 22:45:31.975358',
                'end_time': '2018-01-17 14:01:18.209680'
            }
        ]
    }

分散式爬蟲管理框架Gerapy

是不是方便多了?

可是?真的達到最方便了嗎?肯定沒有!如果這一切的一切,從 Scrapy 的部署、啟動到監控、日誌檢視,我們只需要滑鼠鍵盤點幾下就可以完成,那豈不是美滋滋?更或者說,連 Scrapy 程式碼都可以幫你自動生成,那豈不是爽爆了?

本節我們就來簡單瞭解一下 Gerapy 分散式爬蟲管理框架的使用方法。

安裝

Gerapy 是一款分散式爬蟲管理框架,支援 Python 3,基於 Scrapy、Scrapyd、Scrapyd-Client、Scrapy-Redis、Scrapyd-API、Scrapy-Splash、Jinjia2、Django、Vue.js 開發,Gerapy 可以幫助我們:

  • 更方便地控制爬蟲執行
  • 更直觀地檢視爬蟲狀態
  • 更實時地檢視爬取結果
  • 更簡單地實現專案部署
  • 更統一地實現主機管理
  • 更輕鬆地編寫爬蟲程式碼

安裝非常簡單,只需要執行 pip3 命令即可:

pip3 install gerapy

安裝完成之後我們就可以使用 gerapy 命令了,輸入 gerapy 便可以獲取它的基本使用方法:

gerapy
Usage:
  gerapy init [--folder=<folder>]
  gerapy migrate
  gerapy createsuperuser
  gerapy runserver [<host:port>]
  gerapy makemigrations

如果出現上述結果,就證明 Gerapy 安裝成功了。

初始化

接下來我們來開始使用 Gerapy,首先利用如下命令進行一下初始化,在任意路徑下均可執行如下命令:

gerapy init

執行完畢之後,本地便會生成一個名字為 gerapy 的資料夾,接著進入該資料夾,可以看到有一個 projects 資料夾,我們後面會用到。

緊接著執行資料庫初始化命令:

cd gerapy
gerapy migrate

這樣它就會在 gerapy 目錄下生成一個 SQLite 資料庫,同時建立資料庫表。

接著我們只需要再執行命令啟動服務就好了:

gerapy runserver

gerapy runserver 0.0.0.0:8000 【如果你是在本地,執行 gerapy runserver即可,如果你是在遠端上,你就要改成前面這樣來執行】

這樣我們就可以看到 Gerapy 已經在 8000 埠上運行了。

全部的操作流程截圖如下:

這裡寫圖片描述

這裡寫圖片描述

這裡顯示了主機、專案的狀態,當然由於我們沒有新增主機,所以所有的數目都是 0。

如果我們可以正常訪問這個頁面,那就證明 Gerapy 初始化都成功了。

主機管理

接下來我們可以點選左側 Clients 選項卡,即主機管理頁面,新增我們的 Scrapyd 遠端服務,IP,埠為scrapyd埠,點選右上角的建立按鈕即可新增我們需要管理的 Scrapyd 服務:

這裡寫圖片描述

需要新增 IP、埠,以及名稱,點選建立即可完成新增,點選返回即可看到當前新增的 Scrapyd 服務列表,樣例如下所示:

這裡寫圖片描述

這樣我們可以在狀態一欄看到各個 Scrapyd 服務是否可用,同時可以一目瞭然當前所有 Scrapyd 服務列表,另外我們還可以自由地進行編輯和刪除。

如果你沒有修改配置,應該這裡會打不開,clients那裡配置的時候,也應該會顯示為error,就像這樣

這裡寫圖片描述

所以這個時候就要改一下scrapyd配置*\Lib\site-packages\scrapyd中的default_scrapyd.conf:

將bind_address = 127.0.0.1改為bind_address = 0.0.0.0

這裡寫圖片描述

專案管理

Gerapy 的核心功能當然是專案管理,在這裡我們可以自由地配置、編輯、部署我們的 Scrapy 專案,點選左側的 Projects ,即專案管理選項,我們可以看到如下空白的頁面:

這裡寫圖片描述

假設現在我們有一個 Scrapy 專案,如果我們想要進行管理和部署,還記得初始化過程中提到的 projects 資料夾嗎?這時我們只需要將專案拖動到剛才 gerapy 執行目錄的 projects 資料夾下,例如我這裡寫好了一個 Scrapy 專案,名字叫做 baike,這時把它拖動到 projects 資料夾下:

這時重新整理頁面,我們便可以看到 Gerapy 檢測到了這個專案,同時它是不可配置、沒有打包的:

這裡寫圖片描述

這時我們可以點選部署按鈕進行打包和部署,在右下角我們可以輸入打包時的描述資訊,類似於 Git 的 commit 資訊,然後點選打包按鈕,即可發現 Gerapy 會提示打包成功,同時在左側顯示打包的結果和打包名稱:

這裡寫圖片描述

打包成功之後,我們便可以進行部署了,我們可以選擇需要部署的主機,點選後方的部署按鈕進行部署,同時也可以批量選擇主機進行部署,示例如下:

這裡寫圖片描述

可以發現此方法相比 Scrapyd-Client 的命令列式部署,簡直不能方便更多。

監控任務

部署完畢之後就可以回到主機管理頁面進行任務排程了,任選一臺主機,點選排程按鈕即可進入任務管理頁面,此頁面可以檢視當前 Scrapyd 服務的所有專案、所有爬蟲及執行狀態:

這裡寫圖片描述

我們可以通過點選新任務、停止等按鈕來實現任務的啟動和停止等操作,同時也可以通過展開任務條目檢視日誌詳情:

這裡寫圖片描述

另外我們還可以隨時點選停止按鈕來取消 Scrapy 任務的執行。

這樣我們就可以在此頁面方便地管理每個 Scrapyd 服務上的 每個 Scrapy 專案的運行了。

專案編輯

同時 Gerapy 還支援專案編輯功能,有了它我們不再需要 IDE 即可完成專案的編寫,我們點選專案的編輯按鈕即可進入到編輯頁面,如圖所示:

這裡寫圖片描述

這樣即使 Gerapy 部署在遠端的伺服器上,我們不方便用 IDE 開啟,也不喜歡用 Vim 等編輯軟體,我們可以藉助於本功能方便地完成程式碼的編寫。

程式碼生成

上述的專案主要針對的是我們已經寫好的 Scrapy 專案,我們可以藉助於 Gerapy 方便地完成編輯、部署、控制、監測等功能,而且這些專案的一些邏輯、配置都是已經寫死在程式碼裡面的,如果要修改的話,需要直接修改程式碼,即這些專案都是不可配置的。

在 Scrapy 中,其實提供了一個可配置化的爬蟲 CrawlSpider,它可以利用一些規則來完成爬取規則和解析規則的配置,這樣可配置化程度就非常高,這樣我們只需要維護爬取規則、提取邏輯就可以了。如果要新增一個爬蟲,我們只需要寫好對應的規則即可,這類爬蟲就叫做可配置化爬蟲。

Gerapy 可以做到:我們寫好爬蟲規則,它幫我們自動生成 Scrapy 專案程式碼。

我們可以點選專案頁面的右上角的建立按鈕,增加一個可配置化爬蟲,接著我們便可以在此處新增提取實體、爬取規則、抽取規則了,例如這裡的解析器,我們可以配置解析成為哪個實體,每個欄位使用怎樣的解析方式,如 XPath 或 CSS 解析器、直接獲取屬性、直接新增值等多重方式,另外還可以指定處理器進行資料清洗,或直接指定正則表示式進行解析等等,通過這些流程我們可以做到任何欄位的解析。

再比如爬取規則,我們可以指定從哪個連結開始爬取,允許爬取的域名是什麼,該連結提取哪些跟進的連結,用什麼解析方法來處理等等配置。通過這些配置,我們可以完成爬取規則的設定。

最後點選生成按鈕即可完成程式碼的生成。

生成的程式碼示例結果其結構和 Scrapy 程式碼是完全一致的。

這裡寫圖片描述

生成程式碼之後,我們只需要像上述流程一樣,把專案進行部署、啟動就好了,不需要我們寫任何一行程式碼,即可完成爬蟲的編寫、部署、控制、監測。

結語

以上便是 Gerapy 分散式爬蟲管理框架的基本用法,如需瞭解更多,可以訪問其