基于Python爬取京东双十一商品价格曲线


Posted in Python onOctober 23, 2020

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

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

抓取京东价格

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

基于Python爬取京东双十一商品价格曲线

defget_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原始字符串(raw strings)用法实例
Oct 13 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
pygame实现打字游戏
Feb 19 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
Python绘图实现台风路径可视化代码实例
Oct 23 #Python
Python实现JS解密并爬取某音漫客网站
Oct 23 #Python
解决Python 写文件报错TypeError的问题
Oct 23 #Python
python 利用Pyinstaller打包Web项目
Oct 23 #Python
python logging模块的使用详解
Oct 23 #Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 #Python
Python中免验证跳转到内容页的实例代码
Oct 23 #Python
You might like
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
Destoon模板制作简明教程
2014/06/20 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
介绍一下UNIX启动过程
2013/11/14 面试题
医学生自我鉴定范文
2013/11/08 职场文书
精彩的推荐信范文
2013/11/26 职场文书
材料员岗位职责
2014/03/13 职场文书
设计师求职信模板
2014/05/06 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang