用 Python 制作商品历史价格查询

来源:Python 技术「ID: pythonall」

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

思路

  1. 第一步抓取商品的价格存入 Python 自带的 SQLite 数据库
  2. 每天定时抓取商品价格
  3. 使用 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 解决生活中的小小痛点,让钱包不再干瘪。

(0)

相关推荐

  • 使用python代码实现 PDF 阅读器

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文章来自腾讯云 作者:Python进阶者 想要学习Python?有问题得不到第一 ...

  • conn_sqlite.py

    #!/usr/bin/python import sqlite3 """ 常用模块,读写sqlite """ def get_conn(db ...

  • iPhone专用!网购商品历史最低价查询工具

    这是一个iOS专用的快捷指令,可以一键查询某一款商品的历史价格变动,让我们知道商家是否故意在活动期间抬高价格,以免上当受骗 这款快捷指令由 @科技兽 制作,支持的平台非常多,包括Tao宝.京东.天猫. ...

  • 厉害了,iPhone 专用的网购商品历史最低价查询工具

    厉害了,iPhone 专用的网购商品历史最低价查询工具

  • 捷径 | 网购商品历史最低价查询,加入了折线图走势

    这个捷径,可以查询商品历史价格最低价和最高价,让我们知道这个商品是否值得购买 相对于之前的版本,这个捷径做了升级,可以查看折线图价格走势,更加直观清晰,如下图分别是查询 iPhone X 和 iPho ...

  • 更新 | 网购商品历史最低价一键查询

    这是一个iOS专用的快捷指令,可以一键查询某一款商品的历史价格变动,让我们知道商家是否故意在活动期间抬高价格,以免上当受骗 这款快捷指令由 @科技兽 制作,支持的平台非常多,包括Tao宝.京东.天猫. ...

  • 菜鸟记550-用LOOKUP来为相识20年的老同学制作一个简易的查询器

    万一您身边的朋友用得着呢? 各位朋友早上好,小菜继续和您分享经验之谈,截止今日小菜已分享500+篇经验之谈,可以文章编号或关键词进行搜索. 微信推送规则发生改变,如果您想看到小菜每个工作日的经验之谈, ...

  • 期货交易前分析历史价格就可以了吗?建立个性的买卖交易系统很重要!

    导读: 在交易之前,我们着重会分析历史价格和未来价格的关系,其目的是通过形成的分析事实来评价判断将要发生的事情,但从实战的角度来讲,这仅仅是万里长征走完里第一步.相对真金白银的实战投资,其着眼点更应该 ...

  • Python制作一款简易音乐播放器

    大家好,欢迎来到 Crossin的编程教室 ! 今天给大家分享一个迷你项目案例:利用Python制作一款简易音乐播放器.这个程序具有一定的实用性,用到的技术也不算复杂,可以作为完成基础学习后的练手项目 ...

  • 用 Python 制作一个迷宫游戏

    相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...

  • 中国提琴制作的历史和现状

    2017年国际提琴制作大师协会在北京召开全体会员大会,这是这个在欧洲成立了60年的国际提琴制作权威组织第一次在亚洲召集全体会员大会.自2000年起,协会的领导层就有来中国办会的想法,但协会内部一直有阻 ...