基于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计算方程式根的方法
May 07 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
详解Django配置JWT认证方式
May 09 Python
如何写python的配置文件
Jun 07 Python
Python中的__init__作用是什么
Jun 09 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
python pyhs2 的安装操作
Apr 07 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
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
原生js实现日期联动
2015/01/12 Javascript
angular.bind使用心得
2015/10/26 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
ionic组件ion-tabs选项卡切换效果实例
2016/08/27 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
python 模拟登录B站的示例代码
2020/12/15 Python
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
信用社实习人员自我鉴定
2013/09/20 职场文书
普通员工辞职信
2014/01/17 职场文书
大学生活自我评价
2014/04/09 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
移交协议书
2014/08/19 职场文书
融资合作协议书范本
2014/10/17 职场文书
介绍长城的导游词
2015/01/30 职场文书
财务总监岗位职责
2015/02/03 职场文书
欠款起诉书范文
2015/05/19 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
Python 内置函数速查表一览
2021/06/02 Python