JD價格監控【docker版】


快過年了,准備買些年貨,於是頻繁刷購物網站對比價格,搞得還是挺頭大的。我想能不能做個應用抓取實時價格並在低於預期價格后進行提醒,於是就有了本篇文章。本文主要分享怎么將本地項目打包成鏡像並推送到dockerhub上

最初用的是node+cheerio,請求商品頁面通過選擇器解析商品名稱和價格。但是多次調試后頁面會在頁面內重定向,這樣就抓取不到了,應該是觸發了jd的反爬蟲機制。在換了幾種方式無果后將眼光投向了github,最終fork了一份由python實現的方案進行改善。

效果



技術棧

  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文件夾方便文件掛載
# 基於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還可以在本地打鏡像壓縮包

# 打包鏡像到本地
docker save -o jdspider.tar jdspider
# 解壓加載鏡像
docker load -i jdspider.tar

使用方法

在宿主機上添加配置文件

cd /data/jd-spider/config
touch config.cfg
# config.cfg
[mail]
host     = smtp.qq.com
port     = 25
user     = xxx@qq.com
pass     = xxx
sender   = xxx@qq.com

[dingding]
webhook  = https://oapi.dingtalk.com/robot/send?access_token=xxx

[select]
option   = mail
# 啟動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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM