当前位置: 首页 > 后端技术 > Node.js

从电商数据来看现在的口罩价格

时间:2023-04-03 13:11:26 Node.js

Hi大家好,我是张小竹。今天小猪不解决leetcode问题,而是关注最近很担心的一件事情,就是新型冠状病毒。背景小猪既不是生物专业的学生,??也不是医学专业的学生,??因此他无力分析病毒本身,也无力阅读相关论文。不过相信小伙伴们也从其他渠道了解到了很多相关信息。小猪之所以注意到这一点,是因为这两天一直在看一些社交平台和朋友圈,被这个东西刷屏了,那就是……口罩!口罩!口罩!自从被官方选定为抵御病毒的有效手段后,这种比较稀有的东西一下子变成了各种公共场所的必需品。相应地,“医用外科口罩”、“n95口罩”顿时风靡一时。随之而来的是线上线下的抢购潮。于是,一些社交平台上逐渐出现了各种关于口罩价格暴涨的评论,以及各种截图和吐槽。小猪个人不想对这种为国家赚钱的行为做太多评价,所以也没有过多关注。今天(第22期),小猪看到各大电商平台的官方发帖,普遍都是“首发补贴,禁止涨价,违者下架”。对于这些电商平台的官方行为,小猪本人其实也颇为感慨。不过转念一想,我也很好奇现在的真实情况。那我们就去找资料吧。获取数据按照惯例,这里应该会出现一个词Python。然而,小猪不喜欢。小猪要用JS,哼哼(不是因为小猪不会写Python...所以先看一下大概的思路:(以下涉及到平台本身信息的部分不会太详细)确定关键词.找到目标电商平台的API.根据关键词拉取榜单数据.找到第三方比价平台的API.根据商品信息查询历史价格.对比分析.这里的关键词都是猪不用想太多much,我只是用了“医用外科口罩”和“n95口罩”。关于电商平台,小猪根据个人喜好将视角锁定在某知名电商平台上,也是官方发帖给控制口罩价格的平台之一。首先我查看了request,发现该平台的产品搜索列表还是很容易获取的。但是因为SSR,我实际获取到的是一段HTML代码。在这里写解析器有点没用。有必要,所以小猪直接用开源的lib来解析。下面是一些我以前用过,觉得还不错的库,分别是jsdom、cheerio和htmlparser2。如果这三个纯粹从parsehtml的表现来看,顺序应该是htmlparser2>cheerio>jsdom。然而,由于htmlparser2实际上只是一个简单的解析器,所以比其他两个快是正常的。另外两个在parse的基础上增加了很多外围的功能补充,比如一些选择器,dom操作。从它们扩展的接口和功能来看,顺序应该是jsdom>cheerio>htmlparser2。那么具体场景使用哪一个,小伙伴们可以自行选择。这里我写了几个类似querySelector的具体helper,然后直接使用htmlparser2进行简单快速的解析。我们处理完以上数据后,就可以得到一个基于关键词的商品列表。想起来之后,小猪将目光转向了自己经常使用的第三方比价平台。他也查看了请求,发现还是很容易拿到的。不过有一个特殊的token,看起来比较棘手,因为小猪翻遍了各种请求和响应内容,找了半天,也没有找到这串token的来源。最后只好使出我的法宝,“Balabala张小猪是最棒的(pang)da”,然后惊奇的发现这个token竟然是前端生成的。嗯……有点意思。而且更有意思的是,为了让这一点不那么容易被识破,这里前端加密过程中用到的代码都经过了特殊的混淆处理。一眼望去,满脸迷茫;以第二只眼来看,更是一头雾水。不过,小猪是笨鸭,所以我才发现如何使用它。所以最后还是很高兴自己生成了token。不是猪年运气这么好,哈哈哈>.<测试了以上步骤后,小猪将它们封装成一些简单的作业,然后根据命令行参数获取关键字和页码。这个时候我怕请求太频繁会被封IP,所以特意把promise做成了序列化延迟。20页的数据,等了一会才跑完。我趁机偷了些零食。呵呵,是不会长胖的零食。分析数据终于到了这个激动人心的时刻,接下来就是看看得到的这一堆JSON数据中有没有什么有趣的信息。比如,有没有疯狂涨价但还没有下架的商家?哈哈哈,小猪真是坏透了。再说说这次征集的产品列表,是某知名电商平台关键词“医用外科口罩”“n95口罩”搜索结果的前20页。那就一起来康康吧。第一个是偶然的发现。在分析数据的过程中,小猪第一次意识到,自己平时使用的知名电商平台,在搜索结果列表中竟然有广告。而且这不是外部广告,而是一些店铺的商品,和其他搜索结果看起来一样,只是多了两个很不起眼的小字“广告”。瞎猜也是关键词竞价排名,不过这不是今天的重点,就让他开心吧。以下是收集到的数据中广告所占的比例。看得出来,这个平台在这种高度迷惑性的广告上还是很克制的:接下来,小猪着重对比了产品当前价格和历史价格优势。由于历史价格可能因活动而有一定波动,故取中位数。至于现在的价格,小猪原本想用最近5天的最高价,但想了想,觉得太亏了。值得鼓励的是,知错就改,所以只用最新的价格。然而,结果非常令人兴奋。在两个关键词的商品搜索结果中,当前价格相对于历史中位价的最大涨幅分别达到了400%和1000%。感觉有点刺激。什么?你不相信?我从结果中找了两个例子给小伙伴们体验一下:那么有没有良心商家反其道而行之,比如价格低于历史中位数。当然有,更重要的是,目前的价格相比历史中位价已经达到了50%的折扣。不过小猪一看,不是最近一两天跌的价格。不过还是夸它不涨价吧。整体价格情况如下:从比例来看,情况似乎没有社交平台上看到的那么糟糕。或许电商平台的公告确实起到了一定的作用。虽然还是有涨价的,有的涨价幅度很大。然而,其中超过一半的人仍然维持原价。小猪个人对大幅涨价并没有过多的评价,这里就不给出商家和产品信息了。走到这一步后,小猪觉得一切似乎都很正常,准备给商家点赞了。不过无意间回头看了看上面n95口罩的数据。为什么只有266款便宜货+涨价货+降价货?我不是拿了600个产品吗?难不成小猪穿越了?摸着猪鼻子,感觉事情不简单。回顾之前的数据,小猪发现了一件很有意思的事情。有大量产品是新上架的,根本没有历史数据,自然不属于价格变动范围。而也有少数商品的历史价格记录只是最近一两天,也就是电商平台官宣前不久。它们的比例如下图所示:从统计结果来看,搜索结果前20页的商品中,超过半数没有历史价格记录。加上只有3天历史价格的产品,总和分别达到60%和72%。.而且,对于那些只看广告位的商品,没有达到2/3的历史价格记录。那么,为什么突然有这么多新来者呢?而时间恰到好处,各大电商平台纷纷发文,要求口罩不能涨价,否则将下架。综上所述,以上只是基于某知名电商平台搜索前20页商品的简单数据分析,结果似乎有点耐人寻味。从好的方面来说,可能是发生了这样的病症之后,商家主动上架,提供了更多的相关产品。从坏的角度来说,也可能是绕过电商平台的涨价监控。具体来说,相信小伙伴们也会有自己的想法。这里不打算给出具体的商家和产品数据,因为小猪不针对他们。只是想看看电商平台的相关公告和目前口罩的具体价格是根据真实数据来的。代码还在Piggy的本地repo中,先上个图吧。如果有小伙伴需要,小猪也会整理代码放在github上。这是小猪的github简介,大家可以关注一下,防止迷路。写完文章,第二天早上醒来发现武汉封城了。哎,心里莫名的难过。武汉加油,天佑中国!相关链接我的segmentfault专栏我的知乎专栏