1. 程式人生 > >scrpayd安裝與scrapy爬蟲的部署

scrpayd安裝與scrapy爬蟲的部署

以前我用scrapy寫爬蟲的時候都是通過crawl來執行的,但這樣的執行方式只能執行一個爬蟲,如果想同時執行多個爬蟲可以考慮使用scrapyd的方式,也就是scrapy server。檢視http://scrapyd.readthedocs.io/en/stable/index.html 瞭解更多關於scrapyd的知識。

在 ubuntu 上安裝scrapyd

我是把scrapyd放到了虛擬機器上,下面是我在ubuntu 16.04上安裝scrpayd的過程。 scrapyd 一下三個包,但是使用pip安裝scrapy時可以自動安裝。

Python 2.6及以上版本
Twisted 8.0及以上版本
Scrapy 0.17及以上版本

scrapyd對Ubuntu帶有特有的安裝包,這個安裝包可以很大程度上簡化管理工作,但是根據官方文件的說法,ubuntu16.04可能不支援。(其他的作業系統可沒有這個)。所以我們直接使用pip進行安裝。

pip install scrapyd

安裝之後控制檯會顯示類似的輸出

Successfully installed scrapyd
Cleaning up...

啟動scrapyd

命令列輸入

scrapyd

會得到類似下面的輸出,表示scrapyd伺服器啟動成功,至此我們便可以開始下一步–部署scrapy專案。

2018-08-20T15:43:08+0800 [-] Loading /usr/local/lib/python2.7/dist-packages/scrapyd/txapp.py...
2018-08-20T15:43:08+0800 [-] Scrapyd web console available at http://0.0.0.0:6800/
2018-08-20T15:43:08+0800 [-] Loaded.2017-02-20T15:43:08+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 16.6.0 (/usr/bin/python 2.7.12) starting up.
2018-08-20T15:43:08+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.epollreactor.EPollReactor.
2018-08-20T15:43:08+0800 [-] Site starting on 6800
2018-08-20T15:43:08+0800 [twisted.web.server.Site#info] Starting factory <twisted.web.server.Site instance at 0x7ff7bf8d9128>
2018-08-20T15:43:08+0800 [Launcher] Scrapyd 1.1.1 started: max_proc=4, runner='scrapyd.runner'

在虛擬機器命令列輸入

ifconfig

檢視虛擬機器的ip地址(inet addr)。

此時在本機的瀏覽器中輸入虛擬機器的ip和scrapyd的埠號(預設6800)就可以訪問scrapyd伺服器

http://192.168.83.130:6800/

由於尚未部署專案,瀏覽器上顯示如下:

# Scrapyd
Available projects:
*   Jobs*   Logs*   Documentation
## How to schedule a spider?

To schedule a spider you need to use the API (this web UI is only for monitoring)

Example using [curl](http://curl.haxx.se/):
`curl http://localhost:6800/schedule.json -d project=default -d spider=somespider`

For more information about the API, see the [Scrapyd documentation](http://scrapyd.readthedocs.org/en/latest/)

關閉scrapy

在命令列輸入”Ctrl+C”,然後enter之後,就能停止scrapyd

^C2018-08-21T17:40:08+0800 [-] Received SIGINT, shutting down.
2018-08-21T17:40:08+0800 [-] (TCP Port 6800 Closed)
2018-08-21T17:40:08+0800 [twisted.web.server.Site#info] Stopping factory <twisted.web.server.Site instance at 0x7f62fa4255a8>
2018-08-21T17:40:08+0800 [-] Main loop terminated.
2018-08-21T17:40:08+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] Server Shut Down.

部署scrapy專案到scrapyd

安裝scrapyd-client

根據scrapyd的官方文件,我們可以手動地將專案新增到addversion.json中,當然,scrapyd為我們提供了更為簡單的方法–scrapyd-client,利用這個工具可以很方便的將專案釋出到scrapyd伺服器上。

在本機上直接使用pip安裝即可。

pip install scrapyd-client

安裝好scrapy-client後,根據文件,我cd到scrapy專案目錄下(f:\scrapydata\cdqqcom),輸入

scrapyd-deploy -l

這是應該出現該目錄下可以部署的專案名稱,但是卻提示: scrapyd-deploy不是內部或外部命令,也不是可執行的程式或批處理檔案

百度之後發現windows下缺少檔案,解決方案是在你的python\Script下建立一個scrapyd-deploy.bat檔案,比如我的python放在f:\python下,因此我建立檔案的地址為:

f:\python\Script

填充的內容為

@echo off"f:\python\python.exe" "f:\python\Scripts\scrapyd-deploy" %1 %2 %3 %4 %5 %6 %7 %8 %9

此時,我再cd到scrapy專案根目錄下,執行

scrapy-deploy -l

得到以下結果,即為操作成功。

scrapy_cdqqcom = http://192.168.83.130:6800/

當然,前提是我們需要在當前專案的 scrapy.cfg 檔案中將爬蟲配置好。我的配置是:

[deploy:scrapy_cdqqcom]url = http://192.168.83.130:6800/project = cdqqcom

通過scrpy-client將專案部署到伺服器 cd到專案的根目錄下,執行以下命令:

scrapyd-deploy scrapy-cdqqcom -p cdqqcom

成功反饋,部署成功:

Packing version 1487599081
Deploying to project "cdqqcom" in http://192.168.83.130:6800/addversion.json
Server response (200):
{"status": "ok", "project": "cdqqcom", "version": "1487599081", "spiders": 1, "node_name": "potential-virtual-machine"}

要檢視該爬蟲是否部署成功可以先cd到爬蟲根目錄下,然後通過以下命令:

scrapyd-deploy -L scrapy_cdqqcom

這裡,scrapy_cdqqcom 是配置檔案中的deploy-name,得到的結果如下:

cdqqcom
thepaper

這裡我也不清楚怎麼出來了thepaper這個爬蟲,這個爬蟲deploy叫scrapy_thepaper

排程爬蟲

排程爬蟲需要用到排程工具curl,關於curl可以檢視 官網。

Linux系統一般自帶curl,windows可在官網 下載,下載之後解壓到

F:\curl\curl-7.52.1-win64-mingw

還需要在系統環境變數中進行配置,在 path 中新增環境變數:

F:\curl\curl-7.52.1-win64-mingw\bin

重啟控制檯後,輸入

curl

顯示

curl: try 'curl --help' or 'curl --manual' for more information

curl安裝成功。使用一下命令可以看到scrapyd上已經部署的工程。

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

結果返回如下:

{"status": "ok", "projects": ["cdqqcom", "thepaper"], "node_name": "potential-virtual-machine"}

啟動爬蟲

curl http://192.168.83.130:6800/schedule.json -d project=cdqqcom -d spider=cdqqcom

其中,project是配置檔案中的project名稱,spider是我們編寫的spider裡面的name。返回一下資訊則啟動成功:

{"status": "ok", "jobid": "ad9e4c82f7e111e6a7a6000c2922d487", "node_name": "potential-virtual-machine"}

此時,我們訪問

http://192.168.83.130:6800/jobs

可以看到 在這裡插入圖片描述

點選log可以看到爬蟲的日誌,執行完的爬蟲會顯示在Finished一欄。

在這裡插入圖片描述 停止爬蟲

curl http://192.168.83.130:6800/cancel.json -d project=cdqqcom -d job=ad9e4c82f7e111e6a7a6000c2922d487

爬蟲停止,瀏覽器顯示如下:

exceptions.TypeError: __init__() got an unexpected keyword argument '_job'.

從scrapyd移除工程

curl http://192.168.83.130:6800/delproject.json -d project=thepaper

移除成功的反饋:

{"status": "ok", "node_name": "potential-virtual-machine"}

檔案及日誌

部署後會在ubuntu的home下生成dbs、logs、eggs三個資料夾,logs顧名思義是放日誌的,另外兩個我也不知道幹嘛的。