总体思路:
分析日期时间json ==》 分析请求所需信息 ==》获得Cookies==》解决token ==》逆向分析解决g_tk ==》获得所有好友uin ==》 获得所有好友添加时间 ==》存放 excel
最近BZ在一家中小公司实习,没有多少活,偶逛自己的空间,看到了这个如图,于是有个大胆的想法( ̄▽ ̄)~*
分析目标数据
- 再想想,自己从初中开始用QQ,到现在也该有2千多天了吧,目前好友栏里面,那些再也没有联系过,却不想删除的人,是什么时候添加的呢?加的第一个好友是谁呢?
- 那么问题来了,根据所见即所得的爬虫思想,一定有关于添加好友日期,或已添加天数这个数据,让我们找找。
- 好了,咱们意外的连添加好友的时间也拿到了,对数据敏感的人,应该知道,这是个时间戳。于是我们就能拿到好友的添加时间,和当前时间,得到秒级的成为好友时间。(快让我羡慕的看着你跑去你女票,说已经认识她xx年。。xx秒了)
- 查看我们需要用到的参数:
- activeuin :自己QQ号,passiveuin:好友QQ号,g_tk:一个加密字段,qzonetoken: 主页源码里有
所有好友获取:
- 在自家好友首页能弄到200条好友记录(根据亲密度,这样我们弄到数据也有我们在意的人),出于玩玩的态度,没找其他的,如果朋友有其他获取途径,还望告知~
- 这里json文件里有我们需要的好友的uin(QQ号)
- 需要的请求头,与上面的一样
获得token
位置:当前页源码
请求头:需要登录后的Cookies
获得Cookies (模拟浏览器)
- 方式1:直接取,自己登一下,上Network 里把Cookies粘贴出来,记得用此Cookies时,登录后不要点退出
- 方式2:selenium + chrome 模拟登录,(我们就用这个方法)
获得g_tk:
- 以前找数据都是一条条js找的,最近发现一个强大的工具,Ctrl+shift+F,全js查找,太舒服了,相见恨晚┭┮﹏┭┮
- 这里它指出了,g_tk参数是有plugin.getASCRFToken()函数有关
- 再搜看看,得到一个加密函数:
getACSRFToken:function(url) {
url = QZFL.util.URI(url);
var skey;
if (url) {
if (url.host && url.host.indexOf("qzone.qq.com") > 0) {
try {
skey = QZONE.FP._t.QZFL.cookie.get("p_skey");
} catch (err) {
skey = QZFL.cookie.get("p_skey");
}
} else {
if (url.host && url.host.indexOf("qq.com") > 0) {
skey = QZFL.cookie.get("skey");
}
}
}
if (!skey) {
skey = QZFL.cookie.get("p_skey") || (QZFL.cookie.get("skey") || (QZFL.cookie.get("rv2") || ""));
}
var hash = 5381;
for (var i = 0, len = skey.length;i < len;++i) {
hash += (hash << 5) + skey.charCodeAt(i);
}
return hash & 2147483647;
}
- 我们要做的就会根据这个加密过程,解密:
- 需要:来自Cookies (我们已拿到)的p_skey、skey、rv2三个参数
- 返回 g_tk
存放excel
- 需要;安装相关库,存放来着获得的所有好友的开始时间,星座,当前系统时间