找找知乎的中学生

找找知乎的中学生

0x00 为啥要搞这个

今天吃晚饭的时候刷知乎刷到了[千赞以上99/00后答主及其高赞回答 一览](知乎专栏),最后发现 @施子怡 大大是“人肉搜索”,于是打算借助爬虫再找出一部分。

0x01 构思

知乎不是使用数字id展示个人页面,因此我决定使用通过一个人的关注者来爬,我觉得我们总会关注一些自己同龄人的动向。(因为我就是啊)关于符合要求的人的判断,因为知乎并没有生日的选项(就算有也会有很多人不填写或者填写假的吧),我打算通过找关键字的方法。

const keywords=['(初|高)(一|二|三)','(初|高)中(学生|生|狗)','(98|99|00|01|02|03|零零|蛋蛋|双零|双蛋|零一|零二|零三)后','千禧年','(14|15|16|17|18|19|十四|十五|十六|十七|十八|十九)岁'];

最后,打算使用Node.js开发(的确很独特),用队列的形式,引入diskdb这种好玩的json文件数据库。

0x02 环境准备

npm install cheerio request diskdb async

0x03 简单的搞事流程

知乎的用户界面使用了React框架,用户数据都存放在一个id为data的div里的data-state参数里,提取出这段参数就可以get用户数据了。然后配合cheerio的dom操作,提取出数据。

还有为了节省时间,grab.js里是直接提取出关注者页面的信息,并没有赞、感谢等数据,所以还要getDetail.js帮助把queue这个collection里用户信息保存在list这个collection里。

0x04 执行

npm install
node ./grab.js sohaking
node ./getDetail.js

最后我以用户sohaking(也就是我自己)为起始节点搜寻出378名包含设定关键字的用户。


0x05 其他的

相关的分析:zhuanlan.zhihu.com/p/25

相关源码公布在GitHub:sohaking/zhihu-people-finder

我同时发现,我的逻辑有问题,有些高中生被关注的并不多,所以不应该只从关注了谁入手,还应加上关注者,所以我刚刚修改了搜索规则,会从关注者和关注了两个同时开始爬关系网。

编辑于 2017-02-06