前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >双11套路:先升再降?看我用Python记录商品每天价格!

双11套路:先升再降?看我用Python记录商品每天价格!

作者头像
龙哥
发布2020-11-19 11:35:32
6710
发布2020-11-19 11:35:32
举报
文章被收录于专栏:Python绿色通道Python绿色通道

文 | 某某白米饭

来源 | Python 技术

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

思路

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

抓取京东价格

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

def get_jd_price(skuId):

代码语言:javascript
复制

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

最终将数据插入到数据库

代码语言:javascript
复制
# 新增
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 模块

代码语言:javascript
复制
pip install schedule
代码语言:javascript
复制
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 模块绘制折线图,直观的查看每一天的价格差异

代码语言:javascript
复制

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人工智能调取摄像头神器校招毁约污点公司名录.pdf 前IBM中国总部数据科学家:下一个AI落地热门场景是?

扫码回复「大礼包」后获取大礼重磅!Python交流群已成立 公众号运营至今,离不开小伙伴们的支持。 为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!) 需要进群的朋友,可长按扫描下方二维码。▲长按扫码

对了,看完记得来个五连操作,感谢你的鼓励,这个对我真的很需要

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
  • 抓取京东价格
  • 计划任务
  • 查看历史价格
  • 总结
    • 推荐阅读
    • 卧槽!Python人工智能调取摄像头神器校招毁约污点公司名录.pdf 前IBM中国总部数据科学家:下一个AI落地热门场景是?
    • 扫码回复「大礼包」后获取大礼重磅!Python交流群已成立 公众号运营至今,离不开小伙伴们的支持。 为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!) 需要进群的朋友,可长按扫描下方二维码。▲长按扫码
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档