基于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面向对象编程中的类和对象学习教程
Mar 30 Python
Python设计模式之门面模式简单示例
Jan 09 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
Python双向循环链表实现方法分析
Jul 30 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
python加载自定义词典实例
Dec 06 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
django 实现后台从富文本提取纯文本
Jul 02 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
利用python查看数组中的所有元素是否相同
Jan 08 Python
python中添加模块导入路径的方法
Feb 03 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 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如何把汉字转化为拼音
2015/12/11 PHP
javascript学习网址备忘
2007/05/29 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
python实现封装得到virustotal扫描结果
2014/10/05 Python
python 循环while和for in简单实例
2016/08/16 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
详解python中递归函数
2019/04/16 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
python要安装在哪个盘
2020/06/15 Python
Keras loss函数剖析
2020/07/06 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
工程力学专业毕业生求职信
2013/10/06 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
环境卫生标语
2014/06/09 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
涨价通知
2015/04/23 职场文书
困难补助申请报告
2015/05/19 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android