元旦送书获赠者名单及我是如何用 Python 搞定这次抽奖的

元旦的时候,有在公众号发文回顾参加工作后的经历及展望未来,并承诺从文章的评论区抽取 3 位读者赠送书籍。

现在名单出来了,赠送的书籍是我新买的,自己还未拆封来不及阅读的。

这三本书分别是:

《自我与自性》

此书是荣格的经典书籍,和弗洛伊德齐名的心理学大师。

《生活在别处》

米兰·昆德拉,李诞说他年少时就爱读。

《时与光:一场从古典力学到量子力学的思维盛宴》

我一直对量子理论很感兴趣,希望这本能解惑。

然后,有意思的是抽奖的过程。

本来,我可以凭自己的主观意愿随机挑选。但想了想后,我觉得给自己生活加点乐趣,于是我想到用代码的手段实现。

为了显得更牛 x 一点,我决定用爬虫技术。

我之前从未接触过爬虫,但好在就近用 Python 用的比较多,而 Python 实现爬虫是很容易的事情。

于是,我决定用 Python 去搞定这个事情。

最终结果如下:

请上面的 3 位最迟 1 月 15 日前给我后台私信,反馈收货信息。

有兴趣的同学可以继续看看,我的编程思路,没有兴趣的同学可以忽略接下来比较技术的内容了。

爬虫的目标

写爬虫代码首先要很明确你自己的目的,我这次的目的就是要爬取我上一篇公众号文章里面所有的评论详情。

评论的详情包括:

评论者的昵称

评论者的头像

评论者的评论内容。

一般 Python 爬虫的思路是

1. 模拟请求目标网站 url 链接。

2. 将网站返回的 Html 内容解析,一般选择 BeautifulSoup 这个库。

3. 认真分析 Html 的 DOM 机构,提取感兴趣的内容,进行特定任务,比如存起来,比如重新加工渲染。

但在微信公众号里面干这件事是比较困难的。因为在网页打开微信公众号的文章是看不到任何评论的。

于是,常规的爬虫手段是不行的,我只能曲线救国。

于是,我想到用 Fiddler 来监听我的手机流量。

这个比较麻烦,由于我的手机是 Iphone ,我需要和电脑链接在同一个 WIFI 内。

并且我还需要在手机端设置 WIFI 的 HTTP 代理为我 PC 的 IP 地址。

可是,等一切就绪之后,发现都是徒劳。

真的是白忙活了一场,挫败感是有的。

但总不能放弃吧,不然就太 low 了。

好吧,再想了一下,还是想到了一个可行的方式。

由于,我有自己的微信公众号,所以我可以等咯微信公众号平台去管理我的公众号。

并且,在普通的浏览器就可以登录。由于,Google Chrome 和 Mozillia 等浏览器很方便查看源码,所以我们就很容易得到公众号平台的源码。

微信公众号平台有留言管理,所以按照常理,它是可以被浏览器的 Web 开发工具查看源码的,然后可以很方便提取评论的信息。

我的浏览器是 Chromium,所以按 F12 就能查看源代码。

网页中有许多 js 脚本,内容都是又 js 动态填充的,所以就算用爬虫抓取这个页面的 url 地址,也获取不到 html 中标签的内容。

所以,爬虫是彻底行不通了。

但我还是没有放弃,我仔细观察网页源代码,发现了重要的信息。

在一段 Script 脚本内容中,我发现了评论的痕迹,并且能够和真实页面下能够对应起来。

这显然是一段 json 字符串,app_msg 对应所有文章的评论信息,其中它的 comment 键对应的就是单篇文章的评论,然后再往里面观察,每个评论者的信息都有,也就是我前面讲的我期望抓取的内容。

头像

昵称

评论内容

我仔细将第一篇文章的所有评论的 json 信息直接复制,然后粘贴在一个 comments.txt 文档当中,我的下一个目标就是用 Python 读取它,然后解析里面的 json 内容,最后得到一个列表,列表里面的内容就是评论者的详细情况。

之后,我因为要抽出 3 名幸运者,所以,我分别生成 3 个随机索引就好了,用这 3 个索引从 json 解析出来的列表中就可以提取出对应的信息。

然后,用 matplotlib 这个库,将中奖者信息显示出来。

思路明确了,剩下的编写代码就很简单不过了。

代码非常简单,主要是借助了 json、matplotlib、request 这 3 个库。

最终运行结果。

这样简陋的抽奖代码就完成了。

不过,还没有完。既然都玩了 Python 了,那就再尝试一些新的东西吧。

我一直对词云很感兴趣。

那干脆对这篇文章的评论做一个词云算了。

很容易知道用 JieBa 和 WordCloud 两个库的配合使用可以制作炫酷的词云效果。

于是,我边学边用。

但评论太少了,我索性对整篇文章做一个词云。

也许机器会比我自己更懂我。

好吧,我是个程序员,所以技术还是第一位的。

当然,你如果想让词云依照某种轮廓排列也是可以的。

我的代码如下:

如果对这一块比较感兴趣的同学可以自行搜索 jieba 和 WordCloud 两个库的知识点。

其实,上面的东西都不算难,但对于我本人而言最大的意义在于如何在一次次不理想的环境中去寻找新的解决方案。毕竟,软件开发过程几乎没有理想环境,多开开脑洞,也许就能独辟蹊径。

最后,插播一段广告,因为 CSDN 目前正在评选 2018 年的博客之星,如果你觉得 2018 年我的技术博文有给过你一些帮助,那么可以考虑去投我一票。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190107G062PS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券