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服务,并通 ...
随机推荐
- hive行转列,列转行
实例一:来源: https://www.cnblogs.com/kimbo/p/6208973.html 行转列 (对某列拆分,一列拆多行) 使用函数:lateral view explode(spl ...
- 数据库的查询(结合YGGL.sql)
(如有错误,欢迎指正!) 1.select 语句查询 (1)查询employees表员工部门号和性别,要求消除重复行. mysql> select distinct 员工部门号,性别 from ...
- 探索 .NET团队对API的设计流程
在这篇文章中,我想介绍一些我觉得非常有趣的东西,.NET 团队是如何设计API的? 我们先来看下.NET团队面临的有哪些挑战,您正在设计一套API库,每天有数百万的开发人员在使用这些库,它们在世界各地 ...
- Java 实现简单的 Socket 通信
Java socket 封装了传输层的实现细节,开发人员可以基于 socket 实现应用层.本文介绍了 Java socket 简单用法. 1. 传输层协议 传输层包含了两种协议,分别是 TCP (T ...
- LeetCode225 用队列实现栈
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...
- 【JS学习】var let const声明变量的异同点
[JS学习]var let const声明变量的异同点 前言: 本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述 ...
- cursor pin s和cursor pin s wait on x
1.cursor pin s是一个共享锁,一般情况下是因为发生在SQL短时间内大量执行 案例:在生产库中,突然出现大量的cursor pin s的等待,询问是否有动作后,同事说有编译存储过程(被误导了 ...
- 入门OJ:八中生成树2
题目描述 八中里面有N个建设物,M条边.对于这种要建最小生成树的问题,你应该很熟练了.现在老大决定降低某条边的费用,然后这条边必须要被选中,因为这条路他每天都要走,自然......问选了这条边后是否可 ...
- 转 15 jmeter分布式性能测试
15 jmeter分布式性能测试 背景由于jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起Java内存溢出的错误.要解决这个问题, ...
- CISCO 如何重置3850交换机密码
SUMMARY STEPS: Connect a terminal or PC to the switch. Set the line speed on the emulation software ...