• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

双十一的商品价格“明降暗升”?看看每天的价格数据就知道了

python 搞java代码 3年前 (2022-05-21) 25次浏览 已收录 0个评论

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于Python技术 ,作者派森酱

 

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

 

思路

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

 

抓取京东价格

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

 

def get_jd_price(skuId):

   sku_detail_url = <span>"</span><span>http://item.jd.com/{}.html</span><span>"</span><span>
    sku_price_url </span>= <span>"</span><span>https://p.3.cn/prices/get?type=1&skuid=J_{}</span><span>"</span><span>

    r </span>=<span> requests.get(sku_detail_url.format(skuId)).content

    soup </span>= BeautifulSoup(r, <span>"</span><span>html.parser</span><span>"</span>, from_encoding=<span>"</span><span>utf-8</span><span>"</span><span>)
    sku_name_div </span>= soup.find(<span>"</span><span>div</span><span>"</span>, class_=<span>"</span><span>sku-name</span><span>"</span><span>)

    </span><span>if</span> <span>not</span><span> sku_name_div:
        </span><span>print</span>(<span>"</span><span>您输入的商品ID有误!</span><span>"</span><span>)
        </span><span>return</span>
    <span>else</span><span>:
        sku_name </span>=<span> sku_name_div.text.strip()

    r </span>=<span> requests.get(sku_price_url.format(skuId))
    price </span>= json.loads(r.text)[0][<span>"</span><span>p</span><span>"</span><span>]

    data </span>=<span> {
        </span><span>"</span><span>sku_id</span><span>"</span><span>: skuId,
        </span><span>"</span><span>sku_name</span><span>"</span><span>: sku_name,
        </span><span>"</span><span>price</span><span>"</span><span>: price
    }
    </span><span>return</span> data

www#gaodaima.com来源gaodaimacom搞#^代%!码&网搞代码

 

<code> </code>

把抓取的价格存入 sqlite 数据库,使用 PyCharm 的 Database 功能创建一个 sqlite 数据库

 

 

最终将数据插入到数据库

<span>#</span><span> 新增</span>
<span>def</span><span> insert(data):
    conn </span>= sqlite3.connect(<span>"</span><span>price.db</span><span>"</span><span>)
    c </span>=<span> conn.cursor()
    sql </span>= <span>"</span><span>INSERT INTO price (sku_id,sku_name,price) VALUES ("{}", "{}", "{}")</span><span>"</span>.format(data.get(<span>"</span><span>sku_id</span><span>"</span>), data.get(<span>"</span><span>sku_name</span><span>"</span>), data.get(<span>"</span><span>price</span><span>"</span><span>) )
    c.execute(sql)
    conn.commit()
    conn.close()

</span><span>#</span><span> 查询</span>
<span>def</span><span> select(sku_id):
    conn </span>= sqlite3.connect(<span>"</span><span>price.db</span><span>"</span><span>)
    c </span>=<span> conn.cursor()
    sql </span>= <span>"</span><span>select sku_id, sku_name, price, time from price where sku_id = "{}" order by time asc</span><span>"</span><span>.format(sku_id)
    cursor </span>=<span> c.execute(sql)

    datas </span>=<span> []
    </span><span>for</span> row <span>in</span><span> cursor:
        data </span>=<span> {
            </span><span>"</span><span>sku_id</span><span>"</span><span>: row[0],
            </span><span>"</span><span>sku_name</span><span>"</span>: row[1<span>],
            </span><span>"</span><span>price</span><span>"</span>: row[2<span>],
            </span><span>"</span><span>time</span><span>"</span>: row[3<span>]
        }
        datas.append(data)
    conn.close()

    </span><span>return</span> datas

 

示例结果

 

计划任务

使用轻量级的 schedule 模块每天早上 10 点抓取京东价格这一步骤

安装 schedule 模块

<span>pip install schedule
</span><span>def</span><span> run_price_job(skuId):

    </span><span>#</span><span> 使用不占主线程的方式启动 计划任务</span>
    <span>def</span> run_continuously(interval=1<span>):
        cease_continuous_run </span>=<span> threading.Event()

        </span><span>class</span><span> ScheduleThread(threading.Thread):
            @classmethod
            </span><span>def</span><span> run(cls):
                </span><span>while</span> <span>not</span><span> cease_continuous_run.is_set():
                    schedule.run_pending()
                    time.sleep(interval)

        continuous_thread </span>=<span> ScheduleThread()
        continuous_thread.start()
        </span><span>return</span><span> cease_continuous_run
    
    </span><span>#</span><span> 每天10点运行,get_jd_price:任务方法,skuId:任务方法的参数</span>
    schedule.every().day.at(<span>"</span><span>10:00</span><span>"</span>).do(get_jd_price, skuId=<span>skuId)
    run_continuously()</span>

 

查看历史价格

使用 pytharts 模块绘制折线图,直观的查看每一天的价格差异

datas =<span> select(skuId)

</span><span>def</span><span> line(datas):
    x_data </span>=<span> []
    y_data </span>=<span> []
    </span><span>for</span> data <span>in</span><span> datas:
        x_data.append(data.get(</span><span>"</span><span>time</span><span>"</span><span>))
        y_data.append(data.get(</span><span>"</span><span>price</span><span>"</span><span>))

    (
        Line()
        .add_xaxis(x_data)
        .add_yaxis(datas[0].get(</span><span>"</span><span>sku_name</span><span>"</span>), y_data, is_connect_nones=<span>True)
        .render(</span><span>"</span><span>商品历史价格.html</span><span>"</span><span>)
    )</span>

 

<code> </code>

 

总结

本文抓取了京东商城的价格,小伙伴们也可以修个脚本抓取淘宝的价格。使用 Python 解决生活中的小小痛点,让钱包不再干瘪。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:双十一的商品价格“明降暗升”?看看每天的价格数据就知道了

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址