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顧名思義是放日誌的,另外兩個我也不知道幹嘛的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章