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

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

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

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

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

【初级版】

  1. 从关注的商品页面上找到价格,用 Python 脚本自动把价格抓下来。推荐使用 requests 库;
  1. 把 商品名称、价格、id、网址、日期保存到数据库
  1. 用 Windows 的计划任务或者 Linux 的 crontab 去每天去抓一遍
  1. 绘制出商品价格随日期变化的曲线

这样,当你打算出手的时候,是不是真的划算就一目了然了。

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

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

  1. 校验你的请求头,明显的代码抓取会被屏蔽,也可能会记录你的 IP 或来源信息,限制你的请求频率。 这个只要把 header 信息伪装好点就不是事,必要时加上 cookie。至于 IP,用几个代理轮换请求即可。这个可以参考我们之前的 IP 池项目,参见《听说你好不容易写了个爬虫,结果没抓几个就被封了?》。
  2. 价格没有随 HTML 页面返回,而是放在别的异步请求里获取。 通过 Chrome 开发者工具的 Network 查看页面发出的请求,耐下心找一找,一般总归能发现。
  3. 请求数据中的价格不是直接给出,而是加过密的,甚至是用图片拼出来的。 这个比较复杂,一种方法是慢慢寻找加密或拼接的代码,这个肯定是在前端的 JS 代码中,找到之后自然就搞定。另一种方法是用 Selenium 来直接获取页面上的最终结果。图片价格的话也可以考虑用 OCR 识别。
  4. 还有更复杂的,比如对用户浏览行为进行判定,以及对异常请求的返回数值做手脚等等。因为对抗难度较大且需要具体情况具体分析,这里不展开讨论。

除此之外,一个小技巧就是,移动端网站往往反爬措施没有 PC 网页版那么严格,所以可以尝试用移动站来抓取。同样可以使用 Chrome 的开发者工具,模拟手机环境。

那么在前面的基础上,升级一下:

【中级版】

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

你以为这样就完了吗?

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

另外,光是一家平台历史价格的纵向对比还不够,几家平台的横向对比才更有意义:

【高级版】

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

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

什么?你觉得费劲折腾这个并没有什么用?

好吧,你以为我真的是在跟你谈论双11怎么省钱吗?

类似的工具网上已经有很多了,如果你习惯用搜索引擎解决问题,很容易就能找到,的确没有必要自己去写。而“双11”到底是真的实惠,还是平台和商家的套路,我也一点都不关心。我真正要说的是,如果你学了 Python,却不知道去哪里找项目练手进一步提高,为什么不从身边的需求出发,去开发一些工具,做一点数据的分析。你若完整实现了这样一个项目,去找一份开发工作绝对没有问题。这个价值和你多占了一两折的便宜相比,如何?

类似的案例项目,我们编程教室做了不少,其中的一些放在了 lab.crossincode.com 上,欢迎围观。

另外我们的精品课程之二《码上行动 - 爬虫实战》基于多个实例由浅入深地讲解了 Python 爬虫的开发技巧。感兴趣的同学可在公众号里回复 码上行动 了解课程详情。

  • 点击左下角“阅读原文”,查看爬虫实战课程大纲
  • 代码问题请在论坛 bbs.crossincode.com 上发帖提问
  • 欢迎加入讨论交流群组共同学习进步
  • 别忘了将我们的文章转发朋友圈或在知乎上为我们的专栏点赞,你们的支持将会让编程教室做得更好:)

原文发布于微信公众号 - Crossin的编程教室(crossincode)

原文发表时间:2017-11-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美团技术团队

美团旅行销售绩效系统研发实践

背景 O2O是目前互联网竞争最激烈的领域之一,其重要的业务特征是有大规模的线下业务团队,他们分布在五湖四海,直接服务着数以百万的商家,责任很重,管理的难度巨大。...

42814
来自专栏机器学习算法与Python学习

Chrome 的哪些功能改变了我们浏览网页的方式?

Chrome已经十岁了,正式进入了少年时期,过不多久它就要长起小胡子并且声音变得嘶哑。

862
来自专栏帘卷西风的专栏

从零开始编写网络游戏--卷首语

        自从大四下学期开始,经过短暂的软件开发经历之后,我毅然决定进入我梦寐以求的游戏开发行业,转眼间已经过去5年半了,在这个过程中,有过迷茫,有过放弃...

1021
来自专栏Crossin的编程教室

想用 Python 做数据分析?先玩玩这个再说

数据分析是 Python 的一大应用领域。据我所知,本教室的读者中有不少学习 Python 就是为了在工作中能用它分析数据。这其中,又有相当一部分人是涉及金融相...

4707
来自专栏Jerry的SAP技术分享

SAP成都研究院许聚龙:Hello, Coresystems!

Jerry的前一篇文章《SAP成都研究院数字创新空间沟通S/4HANA和C/4HANA的智能服务演示视频和Coresystems分享预告》已经提到,接下来会由S...

1432
来自专栏ytkah

微信公众平台原创声明功能公测 自媒体原创保护的福音

  昨日晚间微信团队发布微信公众平台面向认证的媒体类型公众号公测原创声明功能的公告,势在维护作者权益,鼓励优质内容产生。心灵鸡汤、养生贴想必你已经厌倦了,甚至都...

3146
来自专栏专知

【观点】漫谈推荐系统及数据库技术(二)——分布式数据库技术

【导读】推荐系统和数据库技术,一个是偏机器学习数据挖掘相关的应用,一个是偏系统存储相关的技术,这两者在实际中有很大的应用。上一次专知推出漫谈推荐系统及数据库技术...

3749
来自专栏ATYUN订阅号

谷歌重磅推出Android Pie,以AI为驱动

谷歌今天透露,Android P代表Android Pie,接替Android Oreo,并将最新的源代码推送到Android开源项目(AOSP)。谷歌移动操作...

792
来自专栏程序员笔记

钉钉机器人

5765
来自专栏BestSDK

一周简报|一登沈洽金:用“刷脸”让登录变得更简单

编辑导语 青云cloud:资源协作服务上线,实现更灵活的权限配置与资源共享;一登沈洽金:用“刷脸”让登录变得更简单;云适配:HTML5并非真正跨平台,想做移动办...

2636

扫码关注云+社区

领取腾讯云代金券