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中的__getitem__专有方法
Jun 27 Python
Python3匿名函数用法示例
Jul 25 Python
python实现决策树分类
Aug 30 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
简单了解python中的与或非运算
Sep 18 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
PyCharm永久激活方式(推荐)
Sep 22 Python
python开发前景如何
Jun 11 Python
解决python对齐错误的方法
Jul 16 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
python周期任务调度工具Schedule使用详解
Nov 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
phpize的深入理解
2013/06/03 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
jQuery 加上最后自己的验证
2009/11/04 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
javascript实现日历效果
2019/06/17 Javascript
在VUE中实现文件下载并判断状态的方法
2019/11/08 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
python抓取网页中链接的静态图片
2018/01/29 Python
python调用百度REST API实现语音识别
2018/08/30 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
2014年党支部承诺书
2014/05/30 职场文书
计划生育个人总结
2015/03/02 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
员工福利申请报告
2015/05/15 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis