快过年了,准备买些年货,于是频繁刷购物网站对比价格,搞得还是挺头大的。我想能不能做个应用抓取实时价格并在低于预期价格后进行提醒,于是就有了本篇文章。本文主要分享怎么将本地项目打包成镜像并推送到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

JD价格监控【docker版】的更多相关文章

  1. 用 OneAPM Cloud Insight 监控 Docker 性能

    Docker 是构建和部署软件的一个新兴的轻量级的平台,也是一个减轻替代虚拟机的容器.Docker 通过给开发者提供兼容不同环境的镜像,成为解决现代基础设施的持续交付的一个流行的解决方案. 和虚拟机一 ...

  2. Docker 版rocketmq部署

    rocketmq 部署启动指南-Docker 版   最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑. 准备工作# ...

  3. rabbitMQ安装docker版 /权限管理命令

    1.进入docker hub镜像仓库地址:https://hub.docker.com/ 2.搜素rabbitMQ 查询镜像,可以看到多种类型,选择带有web页面的(managment) 3.拉取镜像 ...

  4. Docker版EKL安装记录文档

    Docker版EKL安装记录文档 拉取已下三个镜像 docker.io/logstash 7.5.2 b6518c95ed2f 6 months ago 805 MB docker.io/kibana ...

  5. Zabbix 监控 Docker容器

    我们可以通过Python提供的模块docker来取各个docker容器的监控参数.参考文档:http://docker-py.readthedocs.io/en/stable/containers.h ...

  6. cAdvisor+Prometheus+Grafana监控docker

    cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...

  7. 美图DPOS以太坊教程(Docker版)

    一.前言 最近,需要接触区块链项目的主链开发,在EOS.BTC.ethereum.超级账本这几种区块链技术当中,相互对比后,最终还是以go-ethereum为解决方案. 以ethereum为基准去找解 ...

  8. .Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用

    安装docker版jenkins 因为jenkins的docker版本本身没有 dotnetcore的环境,所以我们需要先自己动手制作下包含dotnet环境的jenkins Docker Contai ...

  9. Zabbix-(五)监控Docker容器与自定义jvm监控项

    Zabbix-(五)监控Docker容器与自定义jvm监控项 一.前言 前文中讲述了Zabbix对服务器硬件方面的监控功能,本文将讲述利用Zabbix监控Docker容器中的Java Web服务,并通 ...

随机推荐

  1. vue的路由以后的页面整合

    前面呢也提到一点点,今天就吧这个页面整合给分享一下.有不对的地方还望包容. 在vue中,一般在主显示的界面的路径呢一般是'/'也就是单括号中有一斜杠的这个呢是默认的显示路径.只要路由配置了这个路径用& ...

  2. 【MySQL 基础】MySQL必知必会

    MySQL必知必会 简介 <MySQL必知必会>的学习笔记和总结. 书籍链接 了解SQL 数据库基础 什么是数据库 数据库(database):保存有组织的数据的容器(通常是一个文 件或一 ...

  3. SQL中的主键,候选键,外键,主码,外码

    1.码=超键:能够唯一标识一条记录的属性或属性集. 标识性:一个数据表的所有记录都具有不同的超键 非空性:不能为空 有些时候也把码称作"键" 2.候选键=候选码:能够唯一标识一条记 ...

  4. 【Linux】记一次xfs分区数据恢复

    项目有一块磁盘无法挂载,而且还没有做RAID.... # mount /dev/sda /xxx 报错 mount: special device /dev/sda/ does not exist   ...

  5. 【Linux】查看系统僵尸进程

    ps -ef|grep -v grep|grep defunct 如果这个有显示内容的话,可以手动将进程kill掉即可 ---------------------------------------- ...

  6. 【RAC】通过命令查看当前数据库是不是rac

    SQL> show parameter  cluster_database 如果参数中显示的是 NAME                                 TYPE        ...

  7. 记忆中的像素块褪色了吗?用开源的体素编辑器重新做个 3D 的吧!

    本文适合对图形表现有兴趣的美术或者开发人员 本文作者:HelloGitHub-Joey 早期的的显示设备像素颗粒较大,使得显示内容的颗粒感严重,像是由一堆方块组成的.比较好的例子就是 GBA 上的游戏 ...

  8. 力软最新版本与.netCore版本

    功能强大,直接上图: 加微信或QQ交流开发技术:25489181 netcore版本 版本优势: .NET Core是适用于 Windows.Linux 和 macOS 的免费.开源托管的计算机软件框 ...

  9. 小试牛刀ElasticSearch大数据聚合统计

    ElasticSearch相信有不少朋友都了解,即使没有了解过它那相信对ELK也有所认识E即是ElasticSearch.ElasticSearch最开始更多用于检索,作为一搜索的集群产品简单易用绝对 ...

  10. windows下部署Grafana +prometheus平台监控

      1.Prometheus简介 Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖.用户只需要下载对应平台包,解压并且添加基本的配置即可正常启Prometheus S ...