一名python学习者打开双11的正确姿势
11月11日是个有趣的日子。客观来说,它和一年中其他364(365)天一样没什么特殊,但偏偏又总被人赋予特殊的含义。十年之前,大家谈论的是如何打发“光棍节”(跟 和菜头 一样,此节日的发源地也是本人的母校)。到了近些年,这一天显然又成了“剁手”的代名词,阿猫阿狗们早早地就开始了铺天盖地的宣传。
不过还没到正日子,这几天我就碰上了两件闹心的事:
- 刚下单的商品,第二天就降价了!
- 打算再等等的商品,准备买的时候居然价格涨回去了!
所以别看折扣打得狠,优惠券给得大方,你究竟有占到多少便宜,自己心里还真没点数。于是,我设想了这样一个方案来应对商家们的套路:
【初级版】
1. 从关注的商品页面上找到价格,用 Python 脚本自动把价格抓下来。推荐使用 requests 库;
2. 把 商品名称、价格、id、网址、日期保存到数据库;
3. 用 Windows 的计划任务或者 Linux 的 crontab 去每天去抓一遍;
4. 绘制出商品价格随日期变化的曲线。
这样,当你打算出手的时候,是不是真的划算就一目了然了。
可惜事实并没有这么简单……你会发现很多商品的价格不是那么容易获取到。毕竟这也是人家的敏感数据,怎么能轻轻松松全让你扒了去,回头再写篇文章来把平台批判一番?
当然也不是完全没有办法。通常来说对方有这么几种手段:
1. 校验你的请求头,明显的代码抓取会被屏蔽,也可能会记录你的 IP 或来源信息,限制你的请求频率。
这个只要把 header 信息伪装好点就不是事,必要时加上 cookie。至于 IP,用几个代理轮换请求即可。这个可以参考我们之前的 IP 池项目,参见《听说你好不容易写了个爬虫,结果没抓几个就被封了?》。
2. 价格没有随 HTML 页面返回,而是放在别的异步请求里获取。
通过 Chrome 开发者工具的 Network 查看页面发出的请求,耐下心找一找,一般总归能发现。
3. 请求数据中的价格不是直接给出,而是加过密的,甚至是用图片拼出来的。
这个比较复杂,一种方法是慢慢寻找加密或拼接的代码,这个肯定是在前端的 JS 代码中,找到之后自然就搞定。另一种方法是用 Selenium 来直接获取页面上的终结果。图片价格的话也可以考虑用 OCR 识别。
4. 还有更复杂的,比如对用户浏览行为进行判定,以及对异常请求的返回数值做手脚等等。因为对抗难度较大且需要具体情况具体分析,这里不展开讨论。
除此之外,一个小技巧就是,移动端网站往往反爬措施没有 PC 网页版那么严格,所以可以尝试用移动站来抓取。同样可以使用 Chrome 的开发者工具,模拟手机环境。
那么在前面的基础上,升级一下:
【版】
- 选择移动端网站抓取,找到包含价格信息的请求;
- 请求时尽可能补全 header 信息;
- 轮换代理 IP;
- 难以提取信息的,尝试用 Selenium 来解决。
你以为这样就完了吗?
看看上面这些,你满减了吗?你膨胀了吗?即使你把价格曲线画出来,也没法准确计算价格。我们不太可能为每种优惠编写计算规则,简便的改进方法是把商品的优惠描述一并抓取下来,标记上时间,为价格曲线作参考。比如这样:
另外,光是一家平台历史价格的纵向对比还不够,几家平台的横向对比才更有意义:
【版】
- 抓取并按日期记录优惠信息;
- 将商品名称在其他平台上搜索,获取相关产品的价格信息;
- 当发生降价时发送邮件通知提醒。
去动手干吧,少年!等你开发出这套系统,每天自动抓取,明年双11的时候就可以更理性地买买买啦!(手动滑稽
什么?你觉得费劲折腾这个并没有什么用?
好吧,你以为我真的是在跟你谈论双11怎么省钱吗?
类似的工具网上已经有很多了,如果你习惯用搜索引擎解决问题,很容易就能找到,的确没有必要自己去写。而“双11”到底是真的实惠,还是平台和商家的套路,我也一点都不关心。我真正要说的是,如果你学了 Python,却不知道去哪里找项目练手进一步提高,为什么不从身边的需求出发,去开发一些工具,做一点数据的分析。你若完整实现了这样一个项目,去找一份开发工作没有问题。这个价值和你多占了一两折的便宜相比,如何?
类似的案例项目,我们编程教室做了不少,其中的一些放在了 lab.crossincode.com 上,欢迎围观。
另外我们的精品课程之二《码上行动 - 爬虫实战》基于多个实例由浅入深地讲解了 Python 爬虫的开发技巧,其中就包括了对京东、淘宝网站进行抓取的案例。感兴趣的同学可在公众号(Crossin的编程教室)里回复 码上行动 了解课程详情。
════
其他文章及回答:
用 Python 解读十九工作报告 Python有嘻哈:Crossin教你用代码写出押韵的verse 听说你好不容易写了个爬虫,结果没抓几个就被封了? 喏,你们要的 PyCharm 快速上手指南 编程新手:看懂很多示例,却依然写不好一个程序 给伸手党的福利:Python 新手入门引导 如何用100行Python代码做出魔性声控游戏“八分音符酱” 学习编程的过程中可能会走哪些弯路,有哪些经验可以参考? 你是如何自学 Python 的?
Crossin的编程教室
微信公众号ID:crossincode
网站:crossincode.com
相关文章