基于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和pyqt实现360的CLable控件
Feb 21 Python
Python中unittest用法实例
Sep 25 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
Python3.x爬虫下载网页图片的实例讲解
May 22 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
python实现远程控制电脑
May 23 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
python实现多线程端口扫描
Aug 31 Python
Python 日志logging模块用法简单示例
Oct 18 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
python中24小时制转换为12小时制的方法
Jun 18 Python
Python实现对齐打印 format函数的用法
Apr 28 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
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
css图片自适应大小
2007/11/28 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
js实现select组件的选择输入过滤代码
2014/10/14 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python字符串拼接的几种方法整理
2017/08/02 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
幼儿教师求职信
2014/05/24 职场文书
初中班级口号
2014/06/09 职场文书
社会实践活动总结范文
2014/07/03 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
生产设备维护保养制度
2015/08/06 职场文书
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript