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