Python3網路爬蟲實戰-12、部署相
- 2020 年 1 月 3 日
- 筆記
如果想要大規模抓取數據,那麼一定會用到分散式爬蟲,對於分散式爬蟲來說,我們一定需要多台主機,每台主機多個爬蟲任務,但是源程式碼其實只有一份。那麼我們需要做的就是將一份程式碼同時部署到多台主機上來協同運行,那麼怎麼去部署就又是一個值得思考的問題。
對於 Scrapy 來說,它有一個擴展組件叫做 Scrapyd,我們只需要安裝 Scrapyd 即可遠程管理 Scrapy 任務,包括部署源碼、啟動任務、監聽任務等操作。另外還有 ScrapydClient 和 ScrapydAPI 來幫助我們更方便地完成部署和監聽操作。
另外還有一種部署方式就是 Docker 集群部署,我們只需要將爬蟲製作為 Docker 鏡像,只要主機安裝了 Docker,就可以直接運行爬蟲,而無需再去擔心環境配置、版本問題。
本節我們就來介紹一下相關環境的配置過程。
Docker的安裝
Docker 是一種容器技術,它可以將應用和環境等進行打包,形成一個獨立的,類似於 iOS 的 APP 形式的「應用」,這個應用可以直接被分發到任意一個支援 Docker 的環境中,通過簡單的命令即可啟動運行。Docker 是一種最流行的容器化實現方案。和虛擬化技術類似,它極大的方便了應用服務的部署;又與虛擬化技術不同,它以一種更輕量的方式實現了應用服務的打包。使用 Docker 可以讓每個應用彼此相互隔離,在同一台機器上同時運行多個應用,不過他們彼此之間共享同一個作業系統。Docker 的優勢在於,它可以在更細的粒度上進行資源的管理,也比虛擬化技術更加節約資源。Python資源分享qun 784758214 ,內有安裝包,PDF,學習影片,這裡是Python學習者的聚集地,零基礎,進階,都歡迎 本段參考:DaoCloud官方文檔 對於爬蟲來說,如果我們需要大規模部署爬蟲系統的話,用 Docker 會大大提高效率,工欲善其事,必先利其器。 本節來介紹一下三大平台下 Docker 的安裝方式。
1. 相關鏈接
- 官方網站:https://www.docker.com
- GitHub:https://github.com/docker
- Docker Hub:https://hub.docker.com
- 官方文檔:https://docs.docker.com
- DaoCloud:http://www.daocloud.io
- 中文社區:http://www.docker.org.cn
- 中文教程:http://www.runoob.com/docker/…
- 推薦書籍:https://yeasy.gitbooks.io/doc…
2. Linux下的安裝
詳細的分步驟的安裝說明可以參見官方文檔:https://docs.docker.com/engin…。 在官方文檔中詳細說明了不同 Linux 系統的安裝方法,安裝流程根據文檔一步步執行即可安裝成功。 但是為了使得安裝更加方便,Docker 官方還提供了一鍵安裝腳本,使用它會使得安裝更加便捷,不用再去一步步執行命令安裝了,在此介紹一下一鍵腳本安裝方式。 首先是 Docker 官方提供的安裝腳本,相比其他腳本,官方提供的一定更靠譜,安裝命令如下:
curl -sSL https://get.docker.com/ | sh
只要執行如上一條命令,等待一會兒 Docker 便會安裝完成,非常方便。 但是官方腳本安裝有一個缺點,那就是慢,也可能下載超時,所以為了加快下載速度,我們可以使用中國的鏡像來安裝,所以在這裡還有阿里雲和 DaoCloud 的安裝腳本。 阿里雲安裝腳本:
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
DaoCloud 安裝腳本:
curl -sSL https://get.daocloud.io/docker | sh
兩個腳本可以任選其一,速度都非常不錯。 等待腳本執行完畢之後,就可以使用 Docker 相關命令了,如運行測試 Hello World 鏡像:
docker run hello-world
運行結果:
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 可以正常使用了。
3. Mac下的安裝
Mac 平台同樣有兩種選擇,Docker for Mac 和 Docker Toolbox。 Docker for Mac 要求系統為 OS X EI Captain 10.11 或更新,至少 4GB 記憶體,如果你的系統滿足此要求,則強烈建議安裝 Docker for Mac。 可以使用 HomeBrew 安裝,安裝命令如下:
brew cask install docker Python資源分享qun 784758214 ,內有安裝包,PDF,學習影片,這裡是Python學習者的聚集地,零基礎,進階,都歡迎
另外也可以手動下載安裝包安裝,安裝包下載地址為: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…。
4. 鏡像加速
安裝好 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的安裝
Scrapyd 是一個用於部署和運行 Scrapy 項目的工具。有了它,你可以將寫好的 Scrapy 項目上傳到雲主機並通過 API 來控制它的運行。 既然是 Scrapy 項目部署,所以基本上都使用 Linux 主機,所以本節的安裝是針對於 Linux 主機的。
1. 相關鏈接
- GitHub:https://github.com/scrapy/scr…
- PyPi:https://pypi.python.org/pypi/…
- 官方文檔:https://scrapyd.readthedocs.io
2. Pip安裝
推薦使用 Pip 安裝,命令如下:
pip3 install scrapyd
3. 配置
安裝完畢之後需要新建一個配置文件 /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,以使外網可以訪問。
4. 後台運行
由於 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 鏡像的製作和運行方法。
5. 訪問認證
限制配置完成之後 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 Python資源分享qun 784758214 ,內有安裝包,PDF,學習影片,這裡是Python學習者的聚集地,零基礎,進階,都歡迎
這樣就成功配置了 Scrapyd 的訪問認證了。
6. 結語
本節介紹了 Scrapyd 的安裝方法,在後文我們會詳細了解到 Scrapy 項目的部署及項目運行狀態監控方法。


