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-基础-入门 简介
Aug 09 Python
详解Django框架中用context来解析模板的方法
Jul 20 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
python爬取淘宝商品销量信息
Nov 16 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
python和c语言哪个更适合初学者
Jun 22 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 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实现字符串首字母转换成大写的方法
2015/03/17 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
jQuery入门知识简介
2010/03/04 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
计算机软件专业求职信
2014/06/10 职场文书
经典毕业生求职信
2014/07/12 职场文书
职工小家建设活动方案
2014/08/25 职场文书
个人收入证明模板
2014/09/18 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
同事打架检讨书
2015/05/06 职场文书
2015年暑假生活总结
2015/07/13 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
Python基础之数据类型知识汇总
2021/05/18 Python
react 路由Link配置详解
2021/11/11 Javascript
Python 全局空间和局部空间
2022/04/06 Python
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server