小白 Python 爬蟲部署 Linux

前言

前面國慶節的時候寫過一個簡易的爬蟲。php

《Python 簡易爬蟲實戰》html

還沒看過的同窗能夠先看一下,這隻爬蟲主要用來爬取各個博客平臺的閱讀量等數據,一直以來都是天天晚上我本身手動在本地電腦運行,中間也有過幾回忘記運行了,致使沒有當天的統計數據。前端

固然最好的辦法就是把這隻爬蟲部署在服務器上,讓服務器定時去運行,這樣就不須要我天天人工運行了,還有另一件事就是以前也說了要作一個統計頁面,本身挖的坑,要本身填起來。java

正好最近各個雲服務廠商都在搞雙十一的活動,小編一眼看下去,都是新用戶才能享受優惠,還好,小編在京東雲仍是新用戶,購買了京東雲的服務。python

這個價格實在是太!貴!了!mysql

通常本身測試使用不必買和我同款的機器,小編買這個是爲了後面有一些其餘的服務也能夠部署在上面。linux

閒話很少說,咱們正式開始吧。nginx

前置環境準備

新機器拿到手,除了上面裝好了一個 CentOS 之外,啥都沒有了,第一步固然是先把環境裝起來啊。c++

先列舉下咱們要裝的軟件:git

  • Docker
  • Mysql
  • Python3
  • Java8
  • Nginx

先裝這麼多吧,後續有補充的話再接着裝。

Docker

首先什麼是 Docker 請各位同窗本身擺渡好吧,我簡單解釋一下 Docker 是一個容器,這個容器中能夠運行不少的程序,這些程序之間互不干擾,若是其中那個程序在使用的過程當中配置不對搞不定了,只須要將對應的 container 中止掉刪除掉從新啓動一個便可,從這一點上來說相似於一個沙盒環境。這一點上尤爲是數據庫,本人擁有者豐富的在本地安裝 Mysql 把 Mysql 玩脫了從新安裝的經驗。仍是 Docker 好用。

開始安裝 Docker ,首先時用本身喜歡的工具鏈接到遠程的服務器上(小編這裏使用的是 xshell ),或者也能夠本身本地安裝對應的 CentOS 虛擬機(win 環境下安裝 CentOS 虛擬機又能夠寫一篇教程了,尤爲是其中的網絡配置,第一次安裝的同窗十有八九都卡在這裏,有須要的同窗能夠在公衆號給我留言)。

鏈接成功後以下圖:

好像把 ip 露出來了,emmmmmmmmmmmmm ,各位大佬,沒事幹別攻擊小編的機器,拜謝。

# step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新並安裝 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 開啓Docker服務
sudo systemctl start docker

若是 Linux 是使用 root 帳號登陸,命令中無需添加 sudo ,這個關鍵字的含義是使用管理員權限執行命令。

Docker 默認的鏡像源在遙遠的太平洋的另外一端,能夠配置國內的鏡像加速來加塊咱們的拉取速度,小編這裏選擇的是阿里雲的鏡像加速,配置方式以下:

# 建立文件夾
sudo mkdir -p /etc/docker
# 寫入配置內容
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://12ofullf.mirror.aliyuncs.com"]
}
EOF
# 重啓服務
sudo systemctl daemon-reload
sudo systemctl restart docker

至此,Docker 安裝配置就完成了,可使用以下命令查看 Docker 的相關信息來驗證 Docker 正常安裝:

docker info

頁面正常打印以下:

Mysql

Mysql 能夠有兩種安裝方式,一種是直接在 CentOS 上進行安裝,另外一種是在 Docker 中進行安裝,這裏小編選擇後一種,別問爲啥,問就是簡單、方便、快捷。

小編這裏安裝的 Mysql 選擇版本爲 5.7 ,安裝命令以下:

docker pull mysql:5.7

等進度條走完,好了,咱們已經裝好了 Mysql ,是否是很簡單。

固然,咱們剛纔只是把 Mysql 的景象給 pull 下來了,接下來的啓動纔是關鍵。

docker run --name mysql --restart=always -p 3306:3306 -v /www/mysql/conf.d:/etc/mysql/conf.d -v /www/mysql/mysql.conf.d:/etc/mysql/mysql.conf.d -v /www/mysql/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7

這個命令稍微有點長,不過不要緊,直接 Copy 就 Ok。

稍微解釋下其中的含義吧:

--restart 標誌會檢查容器的退出代碼,並據此來決定是否要重啓容器,默認是不會重啓。

--restart 的參數說明:

  • always:不管容器的退出代碼是什麼,Docker都會自動重啓該容器。
  • on-failure:只有當容器的退出代碼爲非0值的時候纔會自動重啓。另外,該參數還接受一個可選的重啓次數參數,--restart=on-fialure:5 表示當容器退出代碼爲非0時,Docker會嘗試自動重啓該容器,最多5次。

-v 容器內的 /var/lib/mysql 在宿主機上 /www/mysql/datadir 作映射

-e MYSQL_ROOT_PASSWORD 初始密碼

-p 將宿主機3306的端口映射到容器3306端口

接下來咱們測試下剛纔安裝的 Mysql ,固然是使用本地的鏈接工具看下是否能正常鏈接啊,這裏的工具小編選擇了 Navicat 這一經典的 Mysql 鏈接工具。

測試連接成功,咱們的 Mysql 安裝完成。

Nginx

Nginx 是一款優秀的反向代理工具,詳細的信息各位同窗能夠擺渡,簡單描述下使用場景的話就是我一臺服務器上能夠啓動多個服務,經過 Nginx 反向代理,能夠映射多個域名,使用不一樣的域名訪問不一樣的服務,固然 Nginx 的功能遠不止這些。

首先,打開 Nginx 的官網( http://nginx.org/en/download.... ),選擇一個你喜歡的版本,Copy 到它的下載連接:

而後咱們使用 wget 命令來下載它。

cd /opt/
wget http://nginx.org/download/nginx-1.17.5.tar.gz

小編這裏選擇的 Nginx 的版本爲 1.17.5 。

等待進度條走完,這時咱們獲得了一個 Nginx 的壓縮包,接下來解壓它。

tar -xvzf nginx-1.17.5.tar.gz

而後咱們須要安裝 nginx 的編譯環境:

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

等待進度條走完。

進入咱們剛纔解壓的目錄:

cd nginx-1.17.5

開始配置、編譯、安裝:

./configure
make && make install

一小段時間的等待。

等待執行完成後,能夠看到 Nginx 已經幫咱們安裝到 /usr/local/nginx/ 這個目錄下了,接下來咱們能夠建立一個軟鏈接,讓咱們在任何目錄均可以直接執行 nginx 的命令:

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

nginx 相關命令

# 啓動
nginx
# 中止
nginx -s quit 或者 nginx -s stop
# 重啓
nginx -s reload

咱們啓動 nginx ,打開瀏覽器訪問直接訪問ip,如圖:

Nginx 已經安裝完成,反向代理的配置咱們後面用到了再聊,這裏先醬。

Java8

統計報表服務小編這裏計劃使用 Java 來寫,固然 Java 程序也能夠放入 Docker 中運行,不過配置 Java 環境就是一件順手的事情,順便作了吧:)

首先同樣,先下載 JDK8 ,而且將 JDK8 放入 /opt/ 目錄中。

由於小編這裏本地有下好的,就不去下載了,你們能夠訪問 Oracle 的官網下載。

小編這裏給一個下載連接:https://www.oracle.com/techne...

回到咱們的 CentOS :

cd /opt/
ll

小編這裏使用的 jdk 的版本是 8u221 。

直接解壓:

tar -xvzf jdk-8u221-linux-x64.tar.gz

好了,咱們又安裝完了,固然還須要配置下環境變量,直接編輯 /etc/profile 這個文件,在文件中加入咱們的環境變量:

# 編輯
vi /etc/profile

寫入環境變量以下:

# 先按 i 開啓插入模式,寫入如下內容
export JAVA_HOME=/opt/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

退出保存時先按 esc 鍵,輸入 :wq ,再按回車鍵 enter

這時須要刷新下配置文件:

source /etc/profile

咱們來測試剛纔配置的 jdk 環境變量是否生效:

# 輸入
java -version
# 輸出
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
# 輸入
javac -version
# 輸出
javac 1.8.0_221

jdk 安裝完成

Python3

終於到了最重要的 Python3 的安裝了 。

首先同樣,去 Python 的官網,找到對應版本的 Python3 的下載地址,進入 /opt/ 目錄進行下載:

官網下載連接:https://www.python.org/downlo...

小編這裏選擇的是截止目前最新發布的 3.8.0 版本。

wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz

下載完成後直接解壓:

tar -xvzf Python-3.8.0.tgz

解壓後編譯安裝:

# 建立安裝目錄
mkdir /usr/local/python3
cd Python-3.8.0
# 檢查配置
./configure --prefix=/usr/local/python3
# 編譯、安裝
make && make install
# 建立軟鏈接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

測試安裝結果:

# 輸入
python3 -V
# 輸出
Python 3.8.0

至此,前置環境已經搭建完成~~~

部署爬蟲

咱們前面寫的爬蟲是一個 .py ,先把這個文件上傳至服務器,目錄本身喜歡就好,小編通常放置在 /opt/ 目錄下。

因爲咱們的爬蟲引用了一些第三方的模塊,這裏須要先安裝這些模塊:

pip3 install lxml pymysql

安裝完成後咱們執行一下以前的腳本:

# 輸入
python3 /opt/pythonproject/spider-demo.py
# 輸出
---------CSDN 數據寫入完成---------
---------掘金 數據寫入完成---------
---------CNBLOG 數據寫入完成---------

能夠看到執行成功,接下來,咱們要爲 CentOS 設置定時任務,暫時先設置成天天的整點執行一次咱們的 Python 爬蟲,便於咱們分辨當前的任務是否執行。

定時任務咱們是使用 crontab 來完成的,若是當前的 CentOS 不含有 crontab ,能夠先進行安裝:

yum install crontabs -y

幾個基礎命令瞭解一下:

/sbin/service crond start //啓動服務 
/sbin/service crond stop //關閉服務 
/sbin/service crond restart //重啓服務 
/sbin/service crond reload //從新載入配置 
查看crontab服務狀態:service crond status

咱們先配置定時任務:

# 進入任務計劃設置
crontab -e
# 計劃內容
0 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * python3 /opt/pythonproject/spider-demo.py
# 保存退出
:wq

任務配置完成後,從新載入一下配置,或者重啓一下服務都是能夠的。

接下來就是靜靜的等待一小時後看下數據有沒有正常的寫入數據庫。

統計報表

統計報表使用 Java 來完成,後端使用技術爲 SpringBoot + Mybatis + Thymeleaf 。前端設計技術爲 Vue + Element(餓了麼前端組件庫)。

具體實現就不列舉了,有興趣的同窗能夠訪問代碼倉庫獲取。

成品大體是醬紫滴:

Java 程序發佈大體介紹一下吧,在服務器上建立一個本身喜歡的目錄,將本地的程序打包後拖上去,執行下面的命令:

nohup java -jar /opt/project/tongji.jar >tongji.out 2>&1 &

就啓動成功了。固然也能夠將這個程序打成 Docker 鏡像(這個後續有機會再聊吧),經過 Docker 來啓動 Java 服務。

你覺得這就完了麼?怎麼可能,咱們還有 Nginx 沒有用呢,下面來介紹如何經過 Nginx 來反向代理一個域名。

首先,你要有一個域名,小編的域名是在騰訊雲購買的,而且完成了備案,能夠爲所欲爲的使用啦~~~~

首先,自定義一個域名指向咱們的服務器,大體是這樣滴:

稍微等一會,等 DNS 生效。而後咱們訪問域名:http://tongji.geekdigging.com/ ,這時能夠看到頁面跳轉至 Nginx 的首頁:

接下來咱們要配置 Nginx 的反向代理了。

首先在 /usr/local/nginx/conf/nginx.conf 這個文件的最後增長一句話:

include /etc/nginx/vhost/*.conf;

由於咱們後面可能會配置不少域名,這裏直接將全部的域名相關的配置文件都放在 /etc/nginx/vhost/ 這個目錄下,方便管理, nginx 自身的配置文件咱們很少作修改。

咱們在 /etc/nginx/vhost/ 建立 tongji.conf 文件,其中內容以下:

server {
    listen       80;
    autoindex on;
    server_name  tongji.geekdigging.com;
    access_log off;
    # access_log /usr/local/nginx/logs/fuhui_access.log combined;
    error_log  /usr/local/nginx/logs/fuhui_error.log  error;
    index index.html index.htm index.jsp index.php;

    if ( $query_string ~* ".*[\;'\<\>].*" ){
        return 404;
    }

    location / {
        proxy_pass http://127.0.0.1:8080;

        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header Client-IP $remote_addr;

        proxy_set_header X-Forward-For $remote_addr;
        
    }
}

完成後重啓 Nginx :

nginx -s reload

而後咱們就能經過域名訪問本身的統計報表了,如圖:

具體連接爲:http://tongji.geekdigging.com/ ,感興趣的小夥伴能夠本身試試看,有不清楚的地方能夠在公衆號留言問我。

示例代碼

本系列的全部代碼小編都會放在代碼管理倉庫 Github 和 Gitee 上,方便你們取用。

示例代碼-Github

示例代碼-Gitee

參考

https://yq.aliyun.com/article...

https://blog.csdn.net/d124067...

若是個人文章對您有幫助,請掃碼關注下做者的公衆號:獲取最新干貨推送:)

相關文章
相關標籤/搜索