Python 制作查询商品历史价格的小工具


Posted in Python onOctober 20, 2020

一年一度的双十一就快到了,各种砍价、盖楼、挖现金的口令将在未来一个月内充斥朋友圈、微信群中。玩过多次双十一活动的小编表示一顿操作猛如虎,一看结果2毛5。浪费时间不说而且未必得到真正的优惠,双十一电商的“明降暗升”已经是默认的潜规则了。打破这种规则很简单,可以用 Python 写一个定时监控商品价格的小工具。

Python 制作查询商品历史价格的小工具

思路

  • 第一步抓取商品的价格存入 Python 自带的 SQLite 数据库
  • 每天定时抓取商品价格
  • 使用 pyecharts 模块绘制价格折线图,让低价一目了然

抓取京东价格

从商品详情的页面中打开 F12 控制面板,找到包含 p.3 的链接,在旁边的 preview 面板中可以看到当前商品价格

Python 制作查询商品历史价格的小工具

def get_jd_price(skuId):

  sku_detail_url = 'http://item.jd.com/{}.html'
  sku_price_url = 'https://p.3.cn/prices/get?type=1&skuid=J_{}'

  r = requests.get(sku_detail_url.format(skuId)).content

  soup = BeautifulSoup(r, 'html.parser', from_encoding='utf-8')
  sku_name_div = soup.find('div', class_="sku-name")

  if not sku_name_div:
    print('您输入的商品ID有误!')
    return
  else:
    sku_name = sku_name_div.text.strip()

  r = requests.get(sku_price_url.format(skuId))
  price = json.loads(r.text)[0]['p']

  data = {
    'sku_id': skuId,
    'sku_name': sku_name,
    'price': price
  }
  return data

把抓取的价格存入 sqlite 数据库,使用 PyCharm 的 Database 功能创建一个 sqlite 数据库

Python 制作查询商品历史价格的小工具

Python 制作查询商品历史价格的小工具

最终将数据插入到数据库

# 新增
def insert(data):
  conn = sqlite3.connect('price.db')
  c = conn.cursor()
  sql = 'INSERT INTO price (sku_id,sku_name,price) VALUES ("{}", "{}", "{}")'.format(data.get("sku_id"), data.get("sku_name"), data.get('price') )
  c.execute(sql)
  conn.commit()
  conn.close()

# 查询
def select(sku_id):
  conn = sqlite3.connect('price.db')
  c = conn.cursor()
  sql = 'select sku_id, sku_name, price, time from price where sku_id = "{}" order by time asc'.format(sku_id)
  cursor = c.execute(sql)

  datas = []
  for row in cursor:
    data = {
      'sku_id': row[0],
      'sku_name': row[1],
      'price': row[2],
      'time': row[3]
    }
    datas.append(data)
  conn.close()

  return datas

示例结果

Python 制作查询商品历史价格的小工具

计划任务

使用轻量级的 schedule 模块每天早上 10 点抓取京东价格这一步骤

安装 schedule 模块

pip install schedule
def run_price_job(skuId):

  # 使用不占主线程的方式启动 计划任务
  def run_continuously(interval=1):
    cease_continuous_run = threading.Event()

    class ScheduleThread(threading.Thread):
      @classmethod
      def run(cls):
        while not cease_continuous_run.is_set():
          schedule.run_pending()
          time.sleep(interval)

    continuous_thread = ScheduleThread()
    continuous_thread.start()
    return cease_continuous_run
  
  # 每天10点运行,get_jd_price:任务方法,skuId:任务方法的参数
  schedule.every().day.at("10:00").do(get_jd_price, skuId=skuId)
  run_continuously()

查看历史价格

使用 pytharts 模块绘制折线图,直观的查看每一天的价格差异

datas = select(skuId)

def line(datas):
  x_data = []
  y_data = []
  for data in datas:
    x_data.append(data.get('time'))
    y_data.append(data.get('price'))

  (
    Line()
    .add_xaxis(x_data)
    .add_yaxis(datas[0].get('sku_name'), y_data, is_connect_nones=True)
    .render("商品历史价格.html")
  )

Python 制作查询商品历史价格的小工具

总结

本文抓取了京东商城的价格,小伙伴们也可以修个脚本抓取淘宝的价格。使用 Python 解决生活中的小小痛点,让钱包不再干瘪。

示例代码:

用 Python 制作商品历史价格查询

以上就是Python 制作查询商品历史价格的小工具的详细内容,更多关于python 查询历史价格的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中一些自然语言工具的使用的入门教程
Apr 13 Python
Python调用命令行进度条的方法
May 05 Python
Python多线程下载文件的方法
Jul 10 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
python+mysql实现学生信息查询系统
Feb 21 Python
Python 编程速成(推荐)
Apr 15 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
Python可以用来做什么
Nov 23 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
利用Python函数实现一个万历表完整示例
Jan 23 Python
python实现扫雷游戏的示例
Oct 20 #Python
python3排序的实例方法
Oct 20 #Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 #Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 #Python
django使用channels实现通信的示例
Oct 19 #Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 #Python
python实现测试工具(一)——命令行发送get请求
Oct 19 #Python
You might like
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
js的三种继承方式详解
2017/01/21 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
Python模块搜索路径代码详解
2018/01/29 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
优秀应届生推荐信
2013/11/09 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
实习评语大全
2014/04/26 职场文书
爱心活动计划书
2014/04/26 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
黄河绝恋观后感
2015/06/08 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
javascript canvas实现雨滴效果
2021/06/09 Javascript