文章介绍并整理了一直在维护的一个小项目:京东价格监控,并详细整理了该项目前先后后几回重构的技术选型,做为一篇总结。前端
在京东购物时,你是否遇到以下状况:python
如今,一个基于python爬虫的实时价格监控网站上线了,你要作的仅仅是打开浏览器,输入:git
pricemonitor.online
复制代码
设置商品ID(京东商品编号)和您的预期价格,当商品价格【低于】设定的预期价格后自动发送邮件提醒用户。github
用户订阅某品类后(例如数码大类),该类全部商品中降价幅度大于7折的【自营商品】会被选出并发送邮件提醒用户。web
2017年,我当时入门Python语言,学着一步步写网页爬虫,后来接触到了Python后台开发,以后便萌生了作一个与爬虫结合的先后端项目做为练手,最后想到的就是电商商品的爬取。sql
可是,就算在几年前,信息整合的网站就已经很是多了。国内的商品优惠信息整合网站大可能是以什么值得买、惠惠购物助手等信息流推荐+商品历史价格查看这种方式运营。想要作到有本身的特点,就必须作点不同的。数据库
因而我决定将爬虫做为监控手段,监控商品的实时价格。flask
实际上,拿京东举例,京东在当时就已经有了本身的降价提醒,但实际效果并很差,主要问题出在时效性上。用自营商品设置价格提醒后,在京东秒杀时不提醒,在正常显示价格调整后每每在3.4个小时后才能收到提醒邮件。网页爬虫
因而,我从单个商品的监控下手,开始了这个小项目(与其说是项目,不如说仅仅是一个小脚本)。后端
网站需求很简单,整个一代目架构总结以下:
爬虫组件:就是个简单的Python脚本,加上了定时循环。
数据库:采用了最轻量的Sqlite,不须要客户端和服务,单文件保存。
Web端:后台我采用了网上推荐的Flask,前端只套用了HTML模板。 Flask中,涉及到使用Flask-Admin,Flask-Login,Flask-SQLAlchemy,Flask-WTF等组件,搭建了用户注册登陆系统。
Flask+HTML开源:github.com/qqxx6661/fl…
从如今的眼光来看,相比于Python中的Django,我认为Flask对于新上手后台的小白来讲,并不能称得上是很好的入门框架。至于我为何这么认为,这就涉及到Flask和Django的区别了,我摘抄一段答案在这里:
Flask
Django
我认为对于小白来讲,能够先熟悉Django,我以为:
若是让我推荐纯小白开始学Python后台开发,我会建议他从Django开始,在深刻去了解Flask。
说回个人网站,网站初步上线后,我在本身的博客上还有Github上作了些宣传。陆续天天都有几我的来访问个人网站,也有在Github上提Issue提建议的。不得不说,正是这些小事让我看到了项目的活力,让我也拥有了更大的编码热情。
但因为学校的科研任务紧,这个项目在搭建好后,就进入了漫长的维护阶段,在这个阶段中,除了几回爬虫规则的从新设计外,并无其余业务上的改进。
大概半年后,我从新拾了起来,此时已经有一百多个注册用户了,虽然天天的使用率并不高,可是也足够让我知足了。本着学习技术的想法,我开始重构网站。
当时流行的比价插件(购物党/惠惠比价)已经开始作商品的价格监控了,而且他们作的是浏览器插件,完美嵌入浏览器,更方便用户使用,个人价格监控还须要独立的网站进行商品登记,显然已经out了。在这期间,我也萌生了品类监控的想法。
这一时期的主要改动有:
整个二代目架构总结以下:
爬虫组件:从单一的Python脚本改成Scrapy框架爬取。
数据库:使用Mysql做为商品和用户数据库
Web端:Django,Django大而全,使用到了Django自带的后台管理,数据库ORM,登陆验证,Session,邮件等子模块
18年的秋招,对我来讲试一次一场难忘的经历,详情能够看个人秋招文章。秋招我主要是寻找Java后台开发的工做,因此钻研了一段时间的Spring,加之以前的实习经历,开发过实际的SSM项目,对于后台开发,尤为是web后台开发有了更加深入和广阔的认识,。因而,我打算对电商监控网站进行第三次重构,固然,此次的重点主要是用Spring全家桶替代Django。
此外,为了应用先后台分离思想,我找了一个帅哥同窗帮我写React前端,整个项目一会儿就有模有样起来。
这一时期的主要改动有:
整个三代目架构总结以下:
web网站:Springboot提供接口+React前端页面
- Springboot(Api)+ Mysql(用户数据)+ React(前端)
- 表结构设计、Mybaits、Swagger二、Spring Security + JWT、Spring Cache、跨域、数据库定时备份
爬虫:Scrapy分布式爬虫框架
- Requests/Selenium(爬取)、Mysql(商品信息)、Scrapy + Redis(分布式爬虫)
- 反爬策略、IP代理、Scrapy自定义中间件、Headless Chrome网页渲染
监控:Python脚本+Celery任务队列
- Supervisor(守护进程)、Crontab(定时监控脚本)、Celery任务队列(提醒邮件)
这个项目有不少的不足,我也一边编码一边总结。
如今个人TODO List:
时至今日,这个项目的两个功能可能都能找到更好的替代产品,毕竟一我的的精力有限,没法将全部想法都体如今程序上。可是这个项目我还会坚持下去,它已经成为了我技术的试验田,也成为了我继续学习的动力。
个人Csdn:
个人知乎:
个人简书:
个人我的公众号:Rude3Knife