基于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脚本替换指定行实现步骤
Jul 11 Python
python实现发送邮件功能
Jul 22 Python
python学习教程之Numpy和Pandas的使用
Sep 11 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
Django如何防止定时任务并发浅析
May 14 Python
利用Python实现kNN算法的代码
Aug 16 Python
keras模型可视化,层可视化及kernel可视化实例
Jan 24 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 Python
Python如何重新加载模块
Jul 29 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
react-router 路由切换动画的实现示例
2018/12/03 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
Python理解递归的方法总结
2019/01/28 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
通过实例解析Python return运行原理
2020/03/04 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
教育局长自荐信范文
2013/12/22 职场文书
小学生班会演讲稿
2014/01/09 职场文书
导游个人求职信
2014/04/25 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
新学期标语
2014/06/30 职场文书
廉洁自律证明
2015/06/24 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
python 中的jieba分词库
2021/11/23 Python