基于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去除所有html标签的方法
May 05 Python
Python标准库笔记struct模块的使用
Feb 22 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
python3+django2开发一个简单的人员管理系统过程详解
Jul 23 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
Python错误的处理方法
Jun 23 Python
Python join()函数原理及使用方法
Nov 14 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
Spy++的使用方法及下载教程
Jan 29 Python
python使用matplotlib绘制图片时x轴的刻度处理
Aug 30 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中数组定义的几种方法
2013/09/01 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
mongodb和php的用法详解
2019/03/25 PHP
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
JS的get和set使用示例
2014/02/20 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
vue中Element-ui 输入银行账号每四位加一个空格的实现代码
2018/09/14 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
Python列表(list)常用操作方法小结
2015/02/02 Python
全面分析Python的优点和缺点
2018/02/07 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
学校司机岗位职责
2013/11/14 职场文书
数学国培研修感言
2014/02/13 职场文书
新员工试用期自我评价
2015/03/10 职场文书
建党伟业的观后感
2015/06/01 职场文书
2015入党个人自传范文
2015/06/26 职场文书
golang json数组拼接的实例
2021/04/28 Golang
python实现自定义日志的具体方法
2021/05/28 Python
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
python周期任务调度工具Schedule使用详解
2021/11/23 Python