基于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 相关文章推荐
动态创建类实例代码
Oct 07 Python
python+mysql实现简单的web程序
Sep 11 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
python实现智能语音天气预报
Dec 02 Python
python 字典访问的三种方法小结
Dec 05 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
Apr 08 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
Python getattr()函数使用方法代码实例
Aug 10 Python
如何在Anaconda中打开python自带idle
Sep 21 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
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
python如何对链表操作
2020/10/10 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
韩语专业本科生求职信
2013/10/01 职场文书
电气工程师岗位职责
2014/01/01 职场文书
中学教师管理制度
2014/01/14 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
护士辞职信怎么写
2015/02/27 职场文书
首席执行官观后感
2015/06/03 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server