一名python学习者打开双11的正确姿势

276 篇文章 4 订阅
39 篇文章 3 订阅

11月11日是个有趣的日子。客观来说,它和一年中其他364(365)天一样没什么特殊,但偏偏又总被人赋予特殊的含义。十年之前,大家谈论的是如何打发“光棍节”(跟 和菜头 一样,此节日的发源地也是本人的母校)。到了近些年,这一天显然又成了“剁手”的代名词,阿猫阿狗们早早地就开始了铺天盖地的宣传。

不过还没到正日子,这几天我就碰上了两件闹心的事:

  1. 刚下单的商品,第二天就降价了!
  2. 打算再等等的商品,准备买的时候居然价格涨回去了!

所以别看折扣打得狠,优惠券给得大方,你究竟有占到多少便宜,自己心里还真没点数。于是,我设想了这样一个方案

来应对商家们的套路:

【初级版】

  1. 从关注的商品页面上找到价格,用 Python 脚本自动把价格抓下来。推荐使用 requests 库;
    在这里插入图片描述

  2. 把 商品名称、价格、id、网址、日期保存到数据库;
    在这里插入图片描述

  3. 用 Windows 的计划任务或者 Linux 的 crontab 去每天去抓一遍;
    在这里插入图片描述

  4. 绘制出商品价格随日期变化的曲线。
    在这里插入图片描述
    这样,当你打算出手的时候,是不是真的划算就一目了然了

可惜事实并没有这么简单……你会发现很多商品的价格不是那么容易获取到。毕竟这也是人家的敏感数据,怎么能轻轻松松全让你扒了去,回头再写篇文章来把平台批判一番?

当然也不是完全没有办法。通常来说对方有这么几种手段:

  1. 校验你的请求头,明显的代码抓取会被屏蔽,也可能会记录你的 IP 或来源信息,限制你的请求频率。

  2. 价格没有随 HTML 页面返回,而是放在别的异步请求里获取。

通过 Chrome 开发者工具的 Network 查看页面发出的请求,耐下心找一找,一般总归能发现。

  1. 请求数据中的价格不是直接给出,而是加过密的,甚至是用图片拼出来的。

这个比较复杂,一种方法是慢慢寻找加密或拼接的代码,这个肯定是在前端的 JS 代码中,找到之后自然就搞定。另一种方法是用 Selenium 来直接获取页面上的最终结果。图片价格的话也可以考虑用 OCR 识别。

  1. 还有更复杂的,比如对用户浏览行为进行判定,以及对异常请求的返回数值做手脚等等。因为对抗难度较大且需要具体情况具体分析,这里不展开讨论。

除此之外,一个小技巧就是,移动端网站往往反爬措施没有 PC 网页版那么严格,所以可以尝试用移动站来抓取。同样可以使用 Chrome 的开发者工具,模拟手机环境。
在这里插入图片描述
那么在前面的基础上,升级一下:

【中级版】

  1. 选择移动端网站抓取,找到包含价格信息的请求;
  2. 请求时尽可能补全 header 信息;
  3. 轮换代理 IP;
  4. 难以提取信息的,尝试用Selenium 来解决。

你以为这样就完了吗?
在这里插入图片描述

看看上面这些,你满减了吗?你膨胀了吗?即使你把价格曲线画出来,也没法准确计算价格。我们不太可能为每种优惠编写计算规则,简便的改进方法是把商品的优惠描述一并抓取下来,标记上时间,为价格曲线作参考。
在这里插入图片描述
【高级版】

  1. 抓取并按日期记录优惠信息;
  2. 将商品名称在其他平台上搜索,获取相关产品的价格信息;
  3. 当发生降价时发送邮件通知提醒。

去动手干吧,少年!等你开发出这套系统,每天自动抓取,明年双11的时候就可以更理性地买买买啦!

在学习python中有任何困难不懂的可以扫描下面二维码——>添加csdn官方认证微星,多多交流问题,互帮互助,这里有不错的学习教程和开发工具。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值