上一篇文章: Python3網絡爬蟲實戰---十一、爬蟲框架的安裝:ScrapySplash、ScrapyRedis
下一篇文章: Python3網絡爬蟲實戰---1三、部署相關庫ScrapydClient、ScrapydAPI
若是想要大規模抓取數據,那麼必定會用到分佈式爬蟲,對於分佈式爬蟲來講,咱們必定須要多臺主機,每臺主機多個爬蟲任務,可是源代碼其實只有一份。那麼咱們須要作的就是將一份代碼同時部署到多臺主機上來協同運行,那麼怎麼去部署就又是一個值得思考的問題。html
對於 Scrapy 來講,它有一個擴展組件叫作 Scrapyd,咱們只須要安裝 Scrapyd 便可遠程管理 Scrapy 任務,包括部署源碼、啓動任務、監放任務等操做。另外還有 ScrapydClient 和 ScrapydAPI 來幫助咱們更方便地完成部署和監聽操做。python
另外還有一種部署方式就是 Docker 集羣部署,咱們只須要將爬蟲製做爲 Docker 鏡像,只要主機安裝了 Docker,就能夠直接運行爬蟲,而無需再去擔憂環境配置、版本問題。linux
本節咱們就來介紹一下相關環境的配置過程。nginx
Docker 是一種容器技術,它能夠將應用和環境等進行打包,造成一個獨立的,相似於 iOS 的 APP 形式的「應用」,這個應用能夠直接被分發到任意一個支持 Docker 的環境中,經過簡單的命令便可啓動運行。Docker 是一種最流行的容器化實現方案。和虛擬化技術相似,它極大的方便了應用服務的部署;又與虛擬化技術不一樣,它以一種更輕量的方式實現了應用服務的打包。使用 Docker 可讓每一個應用彼此相互隔離,在同一臺機器上同時運行多個應用,不過他們彼此之間共享同一個操做系統。Docker 的優點在於,它能夠在更細的粒度上進行資源的管理,也比虛擬化技術更加節約資源。
本段參考:DaoCloud官方文檔
對於爬蟲來講,若是咱們須要大規模部署爬蟲系統的話,用 Docker 會大大提升效率,工欲善其事,必先利其器。
本節來介紹一下三大平臺下 Docker 的安裝方式。git
詳細的分步驟的安裝說明能夠參見官方文檔:https://docs.docker.com/engin...。
在官方文檔中詳細說明了不一樣 Linux 系統的安裝方法,安裝流程根據文檔一步步執行便可安裝成功。
可是爲了使得安裝更加方便,Docker 官方還提供了一鍵安裝腳本,使用它會使得安裝更加便捷,不用再去一步步執行命令安裝了,在此介紹一下一鍵腳本安裝方式。
首先是 Docker 官方提供的安裝腳本,相比其餘腳本,官方提供的必定更靠譜,安裝命令以下:github
curl -sSL https://get.docker.com/ | sh
只要執行如上一條命令,等待一下子 Docker 便會安裝完成,很是方便。
可是官方腳本安裝有一個缺點,那就是慢,也可能下載超時,因此爲了加快下載速度,咱們可使用國內的鏡像來安裝,因此在這裏還有阿里雲和 DaoCloud 的安裝腳本。
阿里雲安裝腳本:web
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
DaoCloud 安裝腳本:docker
curl -sSL https://get.daocloud.io/docker | sh
兩個腳本能夠任選其一,速度都很是不錯。
等待腳本執行完畢以後,就可使用 Docker 相關命令了,如運行測試 Hello World 鏡像:json
docker run hello-world
運行結果:ubuntu
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 78445dd45222: Pull complete Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly.
若是出現上文相似提示內容則證實 Docker 能夠正常使用了。
Mac 平臺一樣有兩種選擇,Docker for Mac 和 Docker Toolbox。
Docker for Mac 要求系統爲 OS X EI Captain 10.11 或更新,至少 4GB 內存,若是你的系統知足此要求,則強烈建議安裝 Docker for Mac。
可使用 HomeBrew 安裝,安裝命令以下:
brew cask install docker
另外也能夠手動下載安裝包安裝,安裝包下載地址爲:https://download.docker.com/m...
下載完成以後直接雙擊安裝包,而後將程序拖動到應用程序中便可。
點擊程序圖標運行 Docker,會發如今菜單欄中出現了 Docker 的圖標,如圖 1-83 中的第三個小鯨魚圖標:
圖 1-83 菜單欄
點擊圖標展開菜單以後,再點擊 Start 按鈕便可啓動 Docker,啓動成功便會提示 Docker is running,如圖 1-84 所示:
圖 1-84 運行頁面
隨後咱們就能夠在命令行下使用 Docker 命令了。
可使用以下命令測試運行:
sudo docker run hello-world
運行結果如圖 1-85 所示:
圖 1-85 運行結果
若是出現相似輸出則證實 Docker 已經成功安裝。
若是系統不知足要求,能夠下載 Docker Toolbox,其安裝說明爲:https://docs.docker.com/toolb...。
關於 Docker for Mac 和 Docker Toolbox 的區別,能夠參見:https://docs.docker.com/docke...。
安裝好 Docker 以後,在運行測試命令時,咱們會發現它首先會下載一個 Hello World 的鏡像,而後將其運行,可是下載速度有時候會很是慢,這是由於它默認仍是從國外的 Docker Hub 下載的,因此爲了提升鏡像的下載速度,咱們還可使用國內鏡像來加速下載,因此這就有了 Docker 加速器一說。
推薦的 Docker 加速器有 DaoCloud 和阿里雲。
DaoCloud:https://www.daocloud.io/mirror
阿里雲:https://cr.console.aliyun.com...
不一樣平臺的鏡像加速方法配置能夠參考 DaoCloud 的官方文檔:http://guide.daocloud.io/dcs/...。
配置完成以後,能夠發現鏡像的下載速度會快很是多。
以上即是 Docker 的安裝方式說明。
Scrapyd 是一個用於部署和運行 Scrapy 項目的工具。有了它,你能夠將寫好的 Scrapy 項目上傳到雲主機並經過 API 來控制它的運行。
既然是 Scrapy 項目部署,因此基本上都使用 Linux 主機,因此本節的安裝是針對於 Linux 主機的。
推薦使用 Pip 安裝,命令以下:
pip3 install scrapyd
安裝完畢以後須要新建一個配置文件 /etc/scrapyd/scrapyd.conf,Scrapyd 在運行的時候會讀取此配置文件。
在 Scrapyd 1.2 版本以後不會自動建立該文件,須要咱們自行添加。
執行命令新建文件:
sudo mkdir /etc/scrapyd sudo vi /etc/scrapyd/scrapyd.conf
寫入以下內容:
[scrapyd] eggs_dir = eggs logs_dir = logs items_dir = jobs_to_keep = 5 dbs_dir = dbs max_proc = 0 max_proc_per_cpu = 10 finished_to_keep = 100 poll_interval = 5.0 bind_address = 0.0.0.0 http_port = 6800 debug = off runner = scrapyd.runner application = scrapyd.app.application launcher = scrapyd.launcher.Launcher webroot = scrapyd.website.Root [services] schedule.json = scrapyd.webservice.Schedule cancel.json = scrapyd.webservice.Cancel addversion.json = scrapyd.webservice.AddVersion listprojects.json = scrapyd.webservice.ListProjects listversions.json = scrapyd.webservice.ListVersions listspiders.json = scrapyd.webservice.ListSpiders delproject.json = scrapyd.webservice.DeleteProject delversion.json = scrapyd.webservice.DeleteVersion listjobs.json = scrapyd.webservice.ListJobs daemonstatus.json = scrapyd.webservice.DaemonStatus
配置文件的內容能夠參見官方文檔:https://scrapyd.readthedocs.i...,在這裏的配置文件有所修改,其中之一是 max_proc_per_cpu 官方默認爲 4,即一臺主機每一個 CPU 最多運行 4 個Scrapy Job,在此提升爲 10,另一個是 bind_address,默認爲本地 127.0.0.1,在此修改成 0.0.0.0,以使外網能夠訪問。
因爲 Scrapyd 是一個純 Python 項目,在這裏能夠直接調用 scrapyd 來運行,爲了使程序一直在後臺運行,Linux 和 Mac 可使用以下命令:
(scrapyd > /dev/null &)
這樣 Scrapyd 就會在後臺持續運行了,控制檯輸出直接忽略,固然若是想記錄輸出日誌能夠修改輸出目標,如:
(scrapyd > ~/scrapyd.log &)
則會輸出 Scrapyd 運行輸出到 ~/scrapyd.log 文件中。
運行以後即可以在瀏覽器的 6800 訪問 WebUI 了,能夠簡略看到當前 Scrapyd 的運行 Job、Log 等內容,如圖 1-86 所示:
圖 1-86 Scrapyd 首頁
固然運行 Scrapyd 更佳的方式是使用 Supervisor 守護進程運行,若是感興趣能夠參考:http://supervisord.org/。
另外 Scrapyd 也支持 Docker,在後文咱們會介紹 Scrapyd Docker 鏡像的製做和運行方法。
限制配置完成以後 Scrapyd 和它的接口都是能夠公開訪問的,若是要想配置訪問認證的話能夠藉助於 Nginx 作反向代理,在這裏須要先安裝 Nginx 服務器。
在此以 Ubuntu 爲例進行說明,安裝命令以下:
sudo apt-get install nginx
而後修改 Nginx 的配置文件 nginx.conf,增長以下配置:
http { server { listen 6801; location / { proxy_pass http://127.0.0.1:6800/; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; } } }
在這裏使用的用戶名密碼配置放置在 /etc/nginx/conf.d 目錄,咱們須要使用 htpasswd 命令建立,例如建立一個用戶名爲 admin 的文件,命令以下:
htpasswd -c .htpasswd admin
接下就會提示咱們輸入密碼,輸入兩次以後,就會生成密碼文件,查看一下內容:
cat .htpasswd admin:5ZBxQr0rCqwbc
配置完成以後咱們重啓一下 Nginx 服務,運行以下命令:
sudo nginx -s reload
這樣就成功配置了 Scrapyd 的訪問認證了。
本節介紹了 Scrapyd 的安裝方法,在後文咱們會詳細瞭解到 Scrapy 項目的部署及項目運行狀態監控方法。
上一篇文章: Python3網絡爬蟲實戰---十一、爬蟲框架的安裝:ScrapySplash、ScrapyRedis
下一篇文章: Python3網絡爬蟲實戰---1三、部署相關庫ScrapydClient、ScrapydAPI