1. 程式人生 > >JD價格監控【docker版】

JD價格監控【docker版】

> 快過年了,準備買些年貨,於是頻繁刷購物網站對比價格,搞得還是挺頭大的。我想能不能做個應用抓取實時價格並在低於預期價格後進行提醒,於是就有了本篇文章。本文主要分享怎麼將本地專案打包成映象並推送到dockerhub上 **最初用的是node+cheerio,請求商品頁面通過選擇器解析商品名稱和價格。但是多次除錯後頁面會在頁面內重定向,這樣就抓取不到了,應該是觸發了jd的反爬蟲機制。在換了幾種方式無果後將眼光投向了github,最終fork了一份由python實現的方案進行改善。** ### 效果 ![](https://img2020.cnblogs.com/blog/650193/202102/650193-20210203150434665-1702057228.png) ![](https://img2020.cnblogs.com/blog/650193/202102/650193-20210203150455661-1469610699.png) ![](https://img2020.cnblogs.com/blog/650193/202102/650193-20210203150522267-962363014.png) ### 技術棧 1. 前端:Boostrap+Jquery 2. 後端:Python+Flask 3. 爬蟲:requests+beautifulsoup4+PyExecJS 4. 代理池:https://github.com/0xHJK/Proxies 簡易實現 ### fork後新增自定義商品欄位,增加釘釘通知,增加docker啟動。 ### 注意 1. 需要呼叫nodejs來獲取token,所以不僅需要python,還需要node環境。 2. 因為配置檔案需要自己設定,所以新增config資料夾方便檔案掛載 ``` dockerfile # 基於python建立映象 FROM python:3.7.0 # 設定工作目錄 WORKDIR /usr/src/app # 設定pip映象 RUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simple RUN pip config set install.trusted-host mirrors.aliyun.com # 把本地檔案複製到映象工作目錄下 COPY . . # 安裝node環境 RUN wget https://npm.taobao.org/mirrors/node/latest-v12.x/node-v12.16.1-linux-x64.tar.xz && tar -xf node-v12.16.1-linux-x64.tar.xz -C /opt # 設定環境變數 ENV EXECJS_RUNTIME=$PATH:/opt/node-v12.16.1-linux-x64/bin RUN ln -s /opt/node-v12.16.1-linux-x64/bin/node /usr/local/bin/ RUN ln -s /opt/node-v12.16.1-linux-x64/bin/npm /usr/local/bin/ # 列印版本 RUN echo 'node 版本:' && node -v RUN echo 'python 版本:' && python -V # 安裝依賴 RUN pip install --no-cache-dir -r requirements.txt # 啟動 CMD cd web && python server.py ``` ## 生成並推送本地映象到dockerhub 1. 生成本地映象 `docker build -t jdspider .` 2. 修改本地映象和dockerhub上一樣 `docker tag jdspider yimijianfang/jd-spider:0.6` 3. 登入dockerhub `docker login` 4. 推送 `docker push yimijianfang/jd-spider:0.6` 不想上傳到dockerhub還可以在本地打映象壓縮包 ```shell # 打包映象到本地 docker save -o jdspider.tar jdspider # 解壓載入映象 docker load -i jdspider.tar ``` ### 使用方法 在宿主機上新增配置檔案 ```shell cd /data/jd-spider/config touch config.cfg ``` ``` # config.cfg [mail] host = smtp.qq.com port = 25 user = [email protected] pass = xxx sender = [email protected] [dingding] webhook = https://oapi.dingtalk.com/robot/send?access_token=xxx [select] option = mail ``` ```shell # 啟動docker docker run --name jdspider -p 5858:5858 -v /data/jd-spider/config:/usr/src/app/web/config -d yimijianfang/jd-spider:0.6 ``` 開啟http://ip:5858檢視效果,另外如果使用郵箱需要申請開放25埠 #### github地址:https://github.com/yimijianfang/mall-monitor #### 其他專案,歡迎star vue滑塊驗證元件 https://github.com/yimijianfang/vue-drag-verify jquery音樂播放外掛 https://github.com/yimijianfang/music vue元件props自動生成器 https://github.com/yimijianfang/auto-props