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 26 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
python如何实现excel数据添加到mongodb
Jul 30 Python
Python实现全角半角字符互转的方法
Nov 28 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
解析Python的缩进规则的使用
Jan 16 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
Python标准库itertools的使用方法
Jan 17 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
python调用私有属性的方法总结
Jul 24 Python
浅谈怎么给Python添加类型标注
Jun 08 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
详解Js中的模块化是如何实现的
2017/10/18 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
python中字典dict常用操作方法实例总结
2015/04/04 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
好的自荐信的要求
2013/10/30 职场文书
木工主管岗位职责
2013/12/08 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
高中生活自我鉴定
2014/01/18 职场文书
优秀教师主要事迹
2014/02/01 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
药剂专业求职信
2014/06/20 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
财务人员个人工作总结
2015/02/27 职场文书
公司奖励通知
2015/04/21 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis