JD价格监控【docker版】
快过年了,准备买些年货,于是频繁刷购物网站对比价格,搞得还是挺头大的。我想能不能做个应用抓取实时价格并在低于预期价格后进行提醒,于是就有了本篇文章。本文主要分享怎么将本地项目打包成镜像并推送到dockerhub上
最初用的是node+cheerio,请求商品页面通过选择器解析商品名称和价格。但是多次调试后页面会在页面内重定向,这样就抓取不到了,应该是触发了jd的反爬虫机制。在换了几种方式无果后将眼光投向了github,最终fork了一份由python实现的方案进行改善。
效果



技术栈
- 前端:Boostrap+Jquery
- 后端:Python+Flask
- 爬虫:requests+beautifulsoup4+PyExecJS
- 代理池:https://github.com/0xHJK/Proxies 简易实现
fork后新增自定义商品字段,增加钉钉通知,增加docker启动。
注意
- 需要调用nodejs来获取token,所以不仅需要python,还需要node环境。
- 因为配置文件需要自己设置,所以新增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
- 生成本地镜像
docker build -t jdspider . - 修改本地镜像和dockerhub上一样
docker tag jdspider yimijianfang/jd-spider:0.6 - 登录dockerhub
docker login - 推送
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
JD价格监控【docker版】的更多相关文章
- 用 OneAPM Cloud Insight 监控 Docker 性能
Docker 是构建和部署软件的一个新兴的轻量级的平台,也是一个减轻替代虚拟机的容器.Docker 通过给开发者提供兼容不同环境的镜像,成为解决现代基础设施的持续交付的一个流行的解决方案. 和虚拟机一 ...
- Docker 版rocketmq部署
rocketmq 部署启动指南-Docker 版 最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑. 准备工作# ...
- rabbitMQ安装docker版 /权限管理命令
1.进入docker hub镜像仓库地址:https://hub.docker.com/ 2.搜素rabbitMQ 查询镜像,可以看到多种类型,选择带有web页面的(managment) 3.拉取镜像 ...
- Docker版EKL安装记录文档
Docker版EKL安装记录文档 拉取已下三个镜像 docker.io/logstash 7.5.2 b6518c95ed2f 6 months ago 805 MB docker.io/kibana ...
- Zabbix 监控 Docker容器
我们可以通过Python提供的模块docker来取各个docker容器的监控参数.参考文档:http://docker-py.readthedocs.io/en/stable/containers.h ...
- cAdvisor+Prometheus+Grafana监控docker
cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...
- 美图DPOS以太坊教程(Docker版)
一.前言 最近,需要接触区块链项目的主链开发,在EOS.BTC.ethereum.超级账本这几种区块链技术当中,相互对比后,最终还是以go-ethereum为解决方案. 以ethereum为基准去找解 ...
- .Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用
安装docker版jenkins 因为jenkins的docker版本本身没有 dotnetcore的环境,所以我们需要先自己动手制作下包含dotnet环境的jenkins Docker Contai ...
- Zabbix-(五)监控Docker容器与自定义jvm监控项
Zabbix-(五)监控Docker容器与自定义jvm监控项 一.前言 前文中讲述了Zabbix对服务器硬件方面的监控功能,本文将讲述利用Zabbix监控Docker容器中的Java Web服务,并通 ...
随机推荐
- 浅谈ES6数组及对象的解构
一.数组的解构,ES6的新特性,主要是方便操作数组,节省不必要的代码,提高代码质量. 上图例子中, example1: 之前想要获取数组中的值,只能挨个获取下标,然后取值 example2:ES6新特 ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)
#3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...
- HSRP技术(热备份)学习总结
热备份学习视频https://www.bilibili.com/video/BV1i7411G7vm?p=78 • 命令: ○ int fa0/x ○ standby 1 ...
- Linux下的screen和作业任务管理
一.screen 首先介绍下screen,screen是Linux下的一个任务容器,开启了之后就可以让任务在后台执行而不会被网络中断或者是终端退出而影响到. 在Linux中有一些耗时比较久的操作(例如 ...
- 一网打尽,一文讲通虚拟机VirtualBox及Linux使用
本文将从虚拟机的选择.安装.Linux系统安装.SSH客户端工具使用四个方面来详细介绍Linux系统在虚拟机下的安装及使用方法,为你在虚拟机下正常使用Linux保驾护航. 1.虚拟机的选择 在讲虚拟机 ...
- 了解一下ajax
AJAX:是一种无需重新加载页面的情况下能够更新部分(局部更新)网页的技术. 1. 概念:ASychronous JavaScript And XML 异步的JavaScript和XML 首先了解一下 ...
- ctfhub技能树—信息泄露—备份文件下载—.DS_Store
打开靶机 查看页面信息 使用dirsearch进行扫描 访问该网页,下载文件 使用Linux系统打开文件 发现一个特殊文件,使用浏览器打开 拿到flag 二.使用Python-dsstore工具查看该 ...
- ELK一个优秀的日志收集、搜索、分析的解决方案
1 什么是ELK? ELK,是Elastaicsearch.Logstash和Kibana三款软件的简称.Elastaicsearch是一个开源的全文搜索引擎.Logstash则是一个开源的数据收集引 ...
- USB过压保护芯片,高输入电压充电器(OVP)
PW2606B是一种前端过电压和过电流保护装置.它实现了广泛的输入电压范围从2.5VDC到40VDC.过电压阈值可在外部或外部编程设置为内部默认设置.集成功率路径nFET开关的低电阻确保了更好的性能电 ...
- PAT练习num1-害死人补偿命的3n+1猜想
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 年的世界 ...