Python 制作查询商品历史价格的小工具

 更新时间:2020年10月20日 08:54:09   作者:Python技术  
这篇文章主要介绍了Python 如何制作查询商品历史价格的小工具,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下

一年一度的双十一就快到了,各种砍价、盖楼、挖现金的口令将在未来一个月内充斥朋友圈、微信群中。玩过多次双十一活动的小编表示一顿操作猛如虎,一看结果2毛5。浪费时间不说而且未必得到真正的优惠,双十一电商的“明降暗升”已经是默认的潜规则了。打破这种规则很简单,可以用 Python 写一个定时监控商品价格的小工具。

思路

  • 第一步抓取商品的价格存入 Python 自带的 SQLite 数据库
  • 每天定时抓取商品价格
  • 使用 pyecharts 模块绘制价格折线图,让低价一目了然

抓取京东价格

从商品详情的页面中打开 F12 控制面板,找到包含 p.3 的链接,在旁边的 preview 面板中可以看到当前商品价格

def get_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 数据库

最终将数据插入到数据库

# 新增
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

示例结果

计划任务

使用轻量级的 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 查询历史价格的资料请关注脚本之家其它相关文章!

相关文章

  • Scrapy爬虫Response子类在应用中的问题解析

    Scrapy爬虫Response子类在应用中的问题解析

    这篇文章主要为大家介绍了Scrapy爬虫Response它的子类(TextResponse、HtmlResponse、XmlResponse)在应用问题解析
    2023-05-05
  • 一文带你了解Python枚举类enum的使用

    一文带你了解Python枚举类enum的使用

    枚举是与多个唯一常量绑定的一组符号,因为枚举表示的是常量,建议枚举成员名用大写 IntEnum 便于进行系统交互。本文将通过一些示例代码讲解Python枚举类的使用,需要的可以参考一下
    2022-10-10
  • python opencv如何实现图片绘制

    python opencv如何实现图片绘制

    这篇文章主要介绍了python opencv如何实现图片绘制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python语法之通过value找key问题

    python语法之通过value找key问题

    这篇文章主要介绍了python语法之通过value找key问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python中IPYTHON入门实例

    Python中IPYTHON入门实例

    这篇文章主要介绍了Python中IPYTHON的用法入门,较为详细的分析了IPYTHON的配置及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • Python求均值,方差,标准差的实例

    Python求均值,方差,标准差的实例

    今天小编就为大家分享一篇Python求均值,方差,标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python里反向传播算法详解

    python里反向传播算法详解

    在本篇文章了小编给大家整理的是一篇关于python里反向传播算法详解内容,有兴趣的朋友们可以学习下。
    2020-11-11
  • 对Python实现简单的API接口实例讲解

    对Python实现简单的API接口实例讲解

    今天小编就为大家分享一篇对Python实现简单的API接口实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python数据类型最全知识总结

    Python数据类型最全知识总结

    学习一门语言,往往都是从Hello World开始. 但是笔者认为,在一个黑框框中输出一个“你好,世界”并没有什么了不起,要看透事物的本质,熟悉一门语言,就要了解其底层,就是我们常常说的基础,本篇从python中的数据类型开始,需要的朋友可以参考下
    2021-05-05
  • Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现

    Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现

    这篇文章主要介绍了Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08

最新评论