基于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调用java的Webservice示例
Mar 10 Python
Python学习笔记之常用函数及说明
May 23 Python
Python生成器(Generator)详解
Apr 13 Python
Python的pycurl包用法简介
Nov 13 Python
Django实现登录随机验证码的示例代码
Jun 20 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
Python交互式图形编程的实现
Jul 25 Python
Python反爬虫伪装浏览器进行爬虫
Feb 28 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 Python
tensorflow学习笔记之tfrecord文件的生成与读取
Mar 31 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/06/25 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
python计数排序和基数排序算法实例
2014/04/25 Python
理解Python中的With语句
2015/02/02 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
基于Python函数和变量名解析
2019/07/19 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
中学运动会广播稿
2014/01/19 职场文书
开学典礼决心书
2014/03/11 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
销售口号大全
2014/06/11 职场文书
学校运动会开幕词
2016/03/03 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫