11月11日是个有趣的日子。客观来说,它和一年中其他364(365)天一样没什么特殊,但偏偏又总被人赋予特殊的含义。十年之前,大家谈论的是如何打发“光棍节”(跟 和菜头 一样,此节日的发源地也是本人的母校)。到了近些年,这一天显然又成了“剁手”的代名词,阿猫阿狗们早早地就开始了铺天盖地的宣传。
不过还没到正日子,这几天我就碰上了两件闹心的事:
- 刚下单的商品,第二天就降价了!
- 打算再等等的商品,准备买的时候居然价格涨回去了!
所以别看折扣打得狠,优惠券给得大方,你究竟有占到多少便宜,自己心里还真没点数。于是,我设想了这样一个方案
来应对商家们的套路:
【初级版】
-
从关注的商品页面上找到价格,用 Python 脚本自动把价格抓下来。推荐使用 requests 库;
-
把 商品名称、价格、id、网址、日期保存到数据库;
-
用 Windows 的计划任务或者 Linux 的 crontab 去每天去抓一遍;
-
绘制出商品价格随日期变化的曲线。
这样,当你打算出手的时候,是不是真的划算就一目了然了
可惜事实并没有这么简单……你会发现很多商品的价格不是那么容易获取到。毕竟这也是人家的敏感数据,怎么能轻轻松松全让你扒了去,回头再写篇文章来把平台批判一番?
当然也不是完全没有办法。通常来说对方有这么几种手段:
-
校验你的请求头,明显的代码抓取会被屏蔽,也可能会记录你的 IP 或来源信息,限制你的请求频率。
-
价格没有随 HTML 页面返回,而是放在别的异步请求里获取。
通过 Chrome 开发者工具的 Network 查看页面发出的请求,耐下心找一找,一般总归能发现。
- 请求数据中的价格不是直接给出,而是加过密的,甚至是用图片拼出来的。
这个比较复杂,一种方法是慢慢寻找加密或拼接的代码,这个肯定是在前端的 JS 代码中,找到之后自然就搞定。另一种方法是用 Selenium 来直接获取页面上的最终结果。图片价格的话也可以考虑用 OCR 识别。
- 还有更复杂的,比如对用户浏览行为进行判定,以及对异常请求的返回数值做手脚等等。因为对抗难度较大且需要具体情况具体分析,这里不展开讨论。
除此之外,一个小技巧就是,移动端网站往往反爬措施没有 PC 网页版那么严格,所以可以尝试用移动站来抓取。同样可以使用 Chrome 的开发者工具,模拟手机环境。
那么在前面的基础上,升级一下:
【中级版】
- 选择移动端网站抓取,找到包含价格信息的请求;
- 请求时尽可能补全 header 信息;
- 轮换代理 IP;
- 难以提取信息的,尝试用Selenium 来解决。
你以为这样就完了吗?
看看上面这些,你满减了吗?你膨胀了吗?即使你把价格曲线画出来,也没法准确计算价格。我们不太可能为每种优惠编写计算规则,简便的改进方法是把商品的优惠描述一并抓取下来,标记上时间,为价格曲线作参考。
【高级版】
- 抓取并按日期记录优惠信息;
- 将商品名称在其他平台上搜索,获取相关产品的价格信息;
- 当发生降价时发送邮件通知提醒。
去动手干吧,少年!等你开发出这套系统,每天自动抓取,明年双11的时候就可以更理性地买买买啦!
在学习python中有任何困难不懂的可以扫描下面二维码——>添加csdn官方认证微星,多多交流问题,互帮互助,这里有不错的学习教程和开发工具。