代码之美
首发于代码之美
QQ好友列表数据获取

QQ好友列表数据获取

最近在群里面看到很多人说要抓取自己的QQ好友列表信息资料,有的甚至付费抓取。

然后自己比较浅薄的研究了一番,发现这玩意儿其实没那么高深。只要找到了能够获取QQ好友列表的接口就可以了。

找接口之前先安利一个chrome插件,叫做JSON-Handle


就是这个插件,它可以对jsonp(参数中带有json数据的callback回调函数接口)以及传统json进行自动格式化,并且可以像操作Windows的文件夹一样方便。对于json里面的图片甚至可以自动显示,非常适合我们做接口挖掘和数据分析。

当然类似工具还有百度的FE等等插件,大家可以去谷歌商店找找自己用着顺手的。


找接口之前,我们先想想哪些网页可能会出现好友列表呢?

我们想到了充值Q币的页面里面有一个给好友充值QB功能,我们打开chrome之后按下F12打开开发者工具,找到network选项卡开始监听网络请求。

我们点到XHR,XHR为xmlhttprequest的简写,目的是为了只关注ajax请求,我们看到有一个接口

https://pay.qq.com/cgi-bin/personal/get_user_friends.cgi?sck=xxxxxxxxxxxxxxxxxxxxx0&t=0.9508896919433028

看英文名字就是获取用户好友的意思。

我们点Response看看响应体是什么格式

发现是乱糟糟的格式,整理起来很费劲,要不我们再找找别的地方吧。


我们接着想到平时我们QQ空间发说说的时候都有一个艾特好友功能,可以选择艾特列表中任意好友。这个地方有可能也会请求一个获取好友列表的接口。

于是我们像之前一样我们打开chrome之后按下F12打开开发者工具,找到network选项卡开始监听网络请求。


我们发现QQ空间这里有三百多个请求,我们先看看XHR和Other里面是否有我们需要的接口,如果没有的话,我们只能从all里面的三百多个请求里面一个一个看(如果无关图片等资源非常多的情况下也可以用按住ctrl然后选择你想要的请求格式进行过滤),英文比较好的同学大概能很快找到

https://h5.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_show_qqfriends.cgi?uin=867597730&follow_flag=1&groupface_flag=0&fupdate=1&g_tk=1803395013

这个接口是显示QQ好友信息的接口。

我们右键单击该请求,选择在新tab页打开该链接。

经过一段短暂的等待时间之后我们会发现JSON-Handle插件自动帮我们处理好了该带有回调函数的jsonp数据。

我们可以在右边开呗格式化好的json数据之后在python或者php中使用json反序列化函数整理之后存入数据库或者excel表格等等。


可是这里面只有好友网名,备注,分组id以及头像,是否黄钻等等,我们还需要一些更详细的信息,比如说性别,出生年月之类的。我们可以试试看用手机点开某一个人的头像,点更多-详细资料,然后会看到

这种页面。我们在手机上长按该页面,点击在浏览器打开,然后在浏览器中会发现仍然看不到这个页面的真实地址,但是我们惊奇的发现下面有一个分享功能,我们点击该分享按钮,然后把他分享到“我的电脑”上就好了。

http://ti.qq.com/qcard/index.html?qq=867597730&appid=537049073&version=android-6.6.2&_wv=1027

地址便是这样的,替换地址里面的qq参数即可看到好友资料,不过该接口需要带上登录状态。(测试地址是否需要cookie之类的登录状态可以在chrome中按Ctrl+shift+n打开一个隐身模式页面进行访问)

然后电脑上直接打开该地址就可以看到一模一样的网页,写个脚本匹配一下里面的内容抓取出来就好了。

类似的挖掘接口以及浏览器的开发工具利用技巧还有很多,平时多多利用搜索引擎,自己在闲暇之余养成主动探索的习惯,对于一些没试过的功能与插件进行探索性的尝试。很多人看到chrome开发者工具的全英文界面就望而却步,这个时候其实可以安装一些类似于有道桌面词典之类的可以划词翻译的工具进行翻译,频繁使用之后一些常用的英文单词便可牢记于心。


本文章由 @昌维 原创,在知乎专栏-代码之美 https://zhuanlan.zhihu.com/codes 首发,转载请注明出处,谢谢。

编辑于 2017-03-26

文章被以下专栏收录

    对于一些人来说,编程可能只是一项工作,对于另一些人来说,编程就像一种创作,对于少数人来说,编程仿佛是一种艺术。我希望你看完我的专栏,能成为最后的少数人。 我希望把自己的学习经历,自己所了解到的许多专业知识分享给你们,让许多充满热情与创造力的programmer能够不被那些学习道路上的BUG拦住了你那颗火热的上进之心。 也许我废话连篇,也许我有技术性的错误,也许我在写作方向上与你的口味有所不对,希望你能私信与我畅谈,你们的宝贵意见,你们的批评与见解将帮助我和其他我专栏的关注者带来更好的体验与收获。 QQ交流群:255258140