专栏首页Crossin的编程教室一名python学习者打开双11的正确姿势

一名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),作者:crossin

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用十年来学编程

    为什么每个人都急不可耐? 走进任何一家书店,你会看见《Teach Yourself Java in 7 Days》(7天Java无师自通)的旁边是一长排看不到尽...

    Crossin先生
  • 如何用Python抓抖音上的小姐姐

    爬虫的案例我们已讲得太多。不过几乎都是网页爬虫。即使有些手机才能访问的网站,我们也可以通过 Chrome 开发者工具的手机模拟功能来访问,以便于分析请求并抓取。...

    Crossin先生
  • 【Python 第35课】 continue

    break是彻底地跳出循环,而continue只是略过本次循环的余下内容,直接进入下一次循环。 在我们前面写的那个统计分数的程序里,如果发现有成绩不足60分,...

    Crossin先生
  • 科普 | 用通俗语言解释内外网IP与端口映射

    实体IP,它是独一无二的,在网络的世界里,每一部计算机的都有他的位置,一个 IP 就好似一个门牌!例如,你要去百度的网站的话,就要去『180.149.132.4...

    HACK学习
  • 转 LVS 负载均衡

    用户1220053
  • 网关和路由器的区别

      顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。            按照不同的分类标准,网关也有很多种。TCP/...

    bear_fish
  • Day8、Python

    题目有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。 1、程序分析     分析数列的规律     ...

    Jack_Cui
  • 网络时代,了解一下

    现在这个时代没有网寸步难行啊!来来来,虚拟机也是可以连网使用的,今天就来学习一下这个虚拟机的网络配置,首先我们得知道一些名词。

    DataScience
  • 原始 socket 编程

    1.原始 socket 可以和内核一样直接对所有层进行操作(除了物理层)。可以更改 mac 更改 ip 更改端口。so dos 攻击就可以通过原始 socket...

    战神伽罗
  • phalcon-入门篇4(log日志和session缓存)

    #phalcon-入门篇4(log日志和session缓存)# ? 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好...

    喵了个咪233

扫码关注云+社区

领取腾讯云代金券