基于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科学计算环境推荐——Anaconda
Jun 30 Python
wxPython框架类和面板类的使用实例
Sep 28 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 Python
Python递归函数实例讲解
Feb 27 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
pytest中文文档之编写断言
Sep 12 Python
python开发一款翻译工具
Oct 10 Python
python Xpath语法的使用
Nov 26 Python
python爬虫中的url下载器用法详解
Nov 30 Python
python中pickle模块浅析
Dec 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
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
react-native之ART绘图方法详解
2017/08/08 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
python多进程重复加载的解决方式
2019/12/13 Python
Python中包的用法及安装
2020/02/11 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
幼教个人求职信范文
2013/12/02 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
师德模范事迹材料
2014/06/03 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
2014年民政工作总结
2014/11/26 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server