python商品打折问题公式_1500多万种商品的价格每天尽收眼底,我是怎么做到的?...

全文共 2148字,预计学习时长 4分钟

本文的原作者为信息技术和服务企业Waldo的联合创始人、首席技术官Greg Lamp。该企业一直致力于gets you money back when prices drop.也许这篇文章可以为你提供一些做研究或者创业的思路。

c86f10c55687b1a7bc4c251bdf7af197.png

图片来源:pexels.com/@belart84

以下为文章全文:

c9d5e26965539eadae08c35a88a409af.png

Waldo每天都可以从你最喜欢的卖家那里收集到以上信息

在卖掉第一家数据科学公司后,我决定成立一家新公司,帮助人们轻松地在最近购买过的东西上省钱。

我们将公司命名为Waldo(https://www.getwaldo.com/),致力于帮你拿回多花的冤枉钱。如果你近期购买过的商品降价或促销,Waldo可以自动在价格防护窗口上调整商品的价格。

390bf55ce565206c92d2852f6846884f.png

构建整体规划

Waldo的“人工大脑”其实是一个技术基础设施,能够每天追踪1500多万种线上商品的价格。目前,我们已经追踪了超过70个商家的产品,并且这个数字与日俱增。

必须盯住每一个价格

从工程的角度来看,我们知道,由于在线销售的商品销量大,一些域将更难维护。因此,我们查看了按产品销量划分的零售商分布 ——发现绝大多数域都只有少量产品需要追踪。

924be8df4e644ab0a8b5445d33f6543a.png

按产品销量划分的零售商长尾分布

据此,商品的原始数量不成问题,真正的挑战是如何维护这么多不同的域。

实现这一疯狂想法的方法

因此,为了追踪1500多万种商品的价格,问题可以分为以下两类:

1. 广度—— 追踪70多个域中的商品价格且维护成本不会激增。

2. 频率——价格更新的频率越高,我们能发现的促销就越多,处理退款的速度也就越快。

基于以上两个问题,我们决定针对运行效率和用户定制优化实施时间、可重用性以及维护时间。

390bf55ce565206c92d2852f6846884f.png

给Waldo配备“人工大脑”

我们开始在Waldo支持的每一个域中创建爬虫(scraper)。虽然超文本标记语言(HTML)可能因域而异,但方法是相同的:

1. 获取每个域所有类别的列表

2. 获取每个类别中的所有产品

这意味着创建的爬虫在样式上都非常相似。我们实现了代码的可重用性,这也意味着团队的认知超荷状态减少了。

d7d476d05950418b0803b4ea82e44865.png

Navs可以让我们在一个特定域中更快捷地找到所有类别

Python

将Python作为Waldo爬虫堆的编程语言,有两个主要的考虑因素:

1. “自上而下,从左到右”全方位适配

我们最初想着就用node.js(这是我们的web应用程序所使用的语言)。虽然一家公司能拥有统一的编程语言是件好事,但在处理回调和异步操作时,node.js既麻烦又容易出错。因此,我们开始尝试使用Python,感觉非常适配。

cd62d1fa7abdb41a269346e1976dd021.gif

https://media.giphy.com/media/BZhvKu7MT0n2voRhtf/giphy.gif

2. 库

Python有着惊人的爬虫生态系统,涵盖了很多库,例如requests(https://2.python-requests.org/en/master/), BeautifulSoup(https://www.crummy.com/software/BeautifulSoup/bs4/doc/)和Scrapy(https://scrapy.org/)。

当涉及到代码可重用性时,Scrapy真的有很大用处。Scrapy拥有大量默认值和丰富的工具集,让最初级的开发人员也可以在短时间内创建有效的爬虫。

Scrapy还内置支持XPaths(https://www.w3schools.com/xml/xml_xpath.asp),我们使用它来解析和提取每个产品页面中的数据。

Scrapinghub

Scrapy的另一个好处就是拥有Scrapinghub(https://scrapinghub.com/)的专业支持。Scrapinghub团队不仅为Scrapy的开源项目提供了新的特性,而且还基于Scrapy管理和运行自己的SaaS产品。

Scrapinghub提供了爬虫管理从调度到弹性伸缩所有的基础设施,使得团队能够专注于爬虫的业务应用,而不是局限于“看护”工作。

XPathHelper

最后一个工具是XPath Helper(https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=en),可以用于测试XPaths的Chrome插件。

Xpaths可能会失控,所以拥有一个沙盒/控制台工具确实有助于调试scraper。

de3d14c9f6772417fbfa52f3a01a2c88.png

在右上角的文本框中键入XPath,并实时查看结果

质量管理

如果不能及时监控到爬虫质量下降,那它们就没什么价值了。我们发现域有时会改变布局,从而让爬虫能够检测产品价格。两个最常见的问题是:

1. 数据完整性问题(即重复值、产品价格缺失等)

2. 数据缺失(即产品确实在域中,但不在我们的数据库中)

数据完整性

为了解决数据完整性问题,我们进行了很多检验和。检验和是一种简单的检查形式,可以查询检验和来识别那些看起来不太正确的计数。例如,检查数据库中是否有重复的库存量单位(SKU)。

我们有一组每小时运行一次的校验和,以确保所有数据正常。

24286b929e5f5eefd2e96997c520744f.png

在这个例子中可以看到,anopolgie.com缺少价格变化

数据缺失

我们只能估计每个域中有多少产品,所以不知道是否已经抓取了整个目录。因此,有时会漏掉产品。

通常,这些产品被隐藏在一些我们认为爬虫无需涉及的模糊类别里。其中一个例子就是网站分类促销产品的方式。假设一款Coach的钱包正在打折。这就可能导致这款包从配饰类别被移到促销类别,甚至是更棘手的清仓类别中(是的,促销和清仓通常是两个独立的类别)。

b32ff02add20c255193553c999aa1727.png

在上面的例子中,“夏季大甩卖”就是一个完全独立的类别

为了解决这个问题,我们建立了一套手动的质量保证流程,从域中抽取产品样本,并验证它们是否已入库。没错,就是样本。虽然很原始,但非常高效。你会惊讶地发现,人类是多么擅长发现爬虫可能漏掉的产品。

347382373bcb3fcf304d736486448323.png

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值