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 29 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
python中使用print输出中文的方法
Jul 16 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
在Python中通过threshold创建mask方式
Feb 19 Python
Python 生成VOC格式的标签实例
Mar 10 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 Python
Python 一键获取电脑浏览器的账号密码
May 11 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
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
php基本函数汇总
2015/07/09 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
用python读写excel的方法
2014/11/18 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
Python函数式编程实例详解
2020/01/17 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
跟单业务员岗位职责
2014/03/08 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书