专栏名称: Crossin的编程教室
编程世界的新手村。 这里有可能是最简单的 Python 入门教程。 每天5分钟,轻松学编程。
目录
相关文章推荐
成都本地宝  ·  已开票!多个国际赛事落地成都! ·  1 周前  
成都本地宝  ·  补贴1000元/人!在成都考这个证就有机会领 ... ·  1 周前  
成都本地宝  ·  成都年休假、婚假待遇! ·  1 周前  
成都本地宝  ·  全部免费!成都这些中秋活动不去亏大了! ·  1 周前  
51好读  ›  专栏  ›  Crossin的编程教室

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

Crossin的编程教室  · 公众号  ·  · 2017-11-10 14:11

正文

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


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


  1. 刚下单的商品,第二天就降价了!

  2. 打算再等等的商品,准备买的时候居然价格涨回去了!


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


【初级版】


  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 的开发者工具,模拟手机环境。



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


【中级版】


  1. 选择移动端网站抓取,找到包含价格信息的请求;


  2. 请求时尽可能补全 header 信息;


  3. 轮换代理 IP;


  4. 难以提取信息的,尝试用 Selenium 来解决。


你以为这样就完了吗?



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



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



【高级版】


  1. 抓取并按日期记录优惠信息;


  2. 将商品名称在其他平台上搜索,获取相关产品的价格信息;


  3. 当发生降价时发送邮件通知提醒。


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


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


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


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


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


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





  • 点击左下角“阅读原文”,查看爬虫实战课程大纲

  • 代码问题请在论坛 bbs.crossincode.com 上发帖提问

  • 欢迎加入讨论交流群组共同学习进步

  • 别忘了将我们的文章转发朋友圈或在知乎上为我们的专栏点赞,你们的支持将会让编程教室做得更好:)




近期文章推荐阅读:

用 Python 解读十九工作报告

【数据说话】当下的Python就业前景如何

Python有嘻哈:Crossin教你用代码写出押韵的verse

数据分析:当赵雷唱民谣时他唱些什么?

如何用100行Python代码做出魔性声控游戏“八分音符酱”

Python 爬虫爬取美剧网站

爆款游戏《贪吃蛇大作战》的 Python 实现



欢迎加入

Crossin的编程教室

crossincode.com

读者交流QQ群:657099683

微信请加 crossin123 留言入群(新手/进阶/爬虫)


  请把我们分享给身边爱学习的小伙伴 :)