Crossin的编程教室
标题:
一名python学习者打开双11的正确姿势
[打印本页]
作者:
江水滔滔
时间:
2018-7-12 15:03
标题:
一名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
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/)
Powered by Discuz! X2.5