写在前面


当你寂寞而闲着没有什么事可以干的时候,你就会好奇,别人正在交流什么。这个自己的小项目就是上一年(16年)的双11期间,别人都在陪人,或者打算买什么东西,我却在一个人。敲。代。。码。。。

对于这个这个项目,自己写着写着就感觉没什么了意思,因为不是自己经常做的领域,很多东西不在于难易,而是说无从下手,所以自己就慢慢地终止掉了。好在自己慢慢地养成在做项目的时候保持记录的习惯,很多关键点都记了下来,后面隔了这么一段时间又能较好的重新开始填上自己挖的坑。

之所以重新开始进行这个小项目,是因为受到自己在微博和知乎上看到的几篇文章,感觉很有意思。

用弹幕看一场NBA(公牛 - 老鹰)

你以为川普的推特都是他自己写的?数据可不这么认为!

赵雷“成都”火了之后,数据帝出手指导文青的美好未来

顿时也感觉自己其实可以“照虎画猫”,对比着别人分析的一些东西,自己按照自己的数据再分析一遍,想要实现更加新颖或更高级的的功能,总得先让程序跑起来。

实现过程


一. 爬取数据

我采用了Chrome扩展的形式,使用js爬取数据,这样的一个优点就是,可以使用Chrome扩展提供了Cookie相关的API,使得你可以直接获取你Chrome浏览器上任何一个站点的cookie信息。这样,只要你在当前浏览器上登录了QQ空间,并留下了登录的cookie,那么就可以直接利用该cookie来获取登录后的数据。于是就避免了模拟登录这种较为麻烦的事情。下面直接从具体的获取数据说起

1. 获取自己的QQ好友们的账号。

我通过QQ空间中的“好友首页”中的“我在意谁”这个排行榜获取的好友账号。但是有个缺点是,只能获取前200个。但是感觉也足够了,跟自己足够疏远的人就不要爬取了。

爬取的链接如下:

https://h5.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin=1059****&do=2&rd=0.8308968682967424&fupdate=1&clean=0&g_tk=******

其中有一个主要的参数:g_tk,这个在后面爬取每个好友的说说时也会用到,这个参数每次登录都会不同。那么它是如何得到的呐?这就用到了上面提到的cookie了,但是他并不是直接存放在cookie中的,而是由cookie中的p_skey再通过一定计算得到的。具体的计算函数要通过打断点运行的方式在网页的JS源代码中获得(可以参见网上的资料)。最后查到在index.js文件中有一个getToken的函数,负责将p_skey计算成g_tk。大致的形式如下:

getToken:function(url) {var hash = 5381, str;var a = document.createElement("a");a.href = url;if (url && a.hostname.indexOf("qzone.qq.com") >= 0) {str = cookie.get("p_skey") || cookie.get("skey");} else {str = cookie.get("skey");}for (var i = 0, len = str.length;i < len;++i) {hash += (hash << 5) + str.charAt(i).charCodeAt();}return hash & 2147*****;
}

我也不明白上面的5381以及最后hash与上的那个数是什么意思,以防万一泄露什么秘密,我还是打上码吧*_*

p_skey可以通过上面提到的Chrome Extension的API来获取:

chrome.cookies.get({'url':'https://h5.qzone.qq.com','name':'p_skey'}, function(cookie){console.log(cookie.value);var p_skey=cookie.value;g_tk=getToken(p_skey);callback(g_tk);
});

2. 获取每个好友的说说

在进行这一步时,可以有多种选择:

  1. 可以通过自己的主页,来获取好友展示出来的数据(但是经试验好像只能获取一个月以内左右);
  2. 也可以通过好友空间的“说说”面板获取(我采用这种方式);
  3. 或者通过好友的“主页”面板(这种方式获得的数量要比上一种方式要多,不知道为什么,可能是还包含了“分享”的东西)。

获取说说内容的链接形式如下:

http://h5.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feed***

但是上面的连接只能获取说说的内容,以及评论等内容,无法获取点赞的相关信息,所以需要单独获取点赞的信息,数据获取链接形式如下:

https://h5.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/user/qz_opcnt2?_stp=14861111&unikey=http://user.qzone.qq.com/148***840/mood/785f7a589a9d45578

其中的unikey是每条说说的地址,可以在上面获取说说内容的时候获取到。

这样一条说说的基本信息如:发表的时间,内容,点赞数及人员,评论数及人员,我们都已经获取到了。↖(ω)↗

下面就是不断的根据第一步获取的好友列表中的好友去迭代了。但是需要注意的是:迭代的不能太快。不然的话会被腾讯封住的,而没有办法继续访问好友的空间,提示没有相应的权限,不过,一会就自己解封了。我没有一个个的去试,感觉设置每个请求的间隔为3s不会被封。

二. 分析数据

到了该项目最关键的地方,也是自己最没有头绪的地方了。

为了节省时间,我爬取了192个好友从16年10月1日到今天(17年2月8日)的进1100条说说(其中还有一些好友并没有对我开放空间权限,看不到她的说说,好伤心)ͼ(ݓ_ݓ)ͽ

  1. 每天发表说说的数量

    上图是从10月1日到12月31日的每天发表的说说数量的统计柱状图。10月1日较高可以理解,刚放假;最后几天是靠近元旦,理应数量比较高。但是查了一下数据,不理解为什么中间有一个比较高的时间点,是在12月1日,这天有什么事吗?又看了下当天的说说,发现并没有什么特别,可能是一个同学发的广告发多了。。。。

  2. 按周每天发表的说说数量

    按周为周期,每天发表说说的数量,可以看出周一周二最低,周六最高,周日次之。看来大家都是学生,刚周末时最欢腾、刚开学,最不活跃

  3. 每天中各个时间段发表说说的数量

    可以看出大家都偏“夜猫子”,最活跃的点是在晚上10点左右,而且在下午两点左右发表的说说也比较少,应该是大家有午睡的习惯。整天的趋势是越来越活越,发表的说说是越来越多。

  4. 每周发表说说的数量

    从2016年的第40周(这个没有统计完,10月1号是周六),到2017第6周(同样这周也没过完),中间有两个明显高的点,第一个看得出是靠近元旦的最后一周,第四周又比较高,可以猜的出,那是春节所在的一周。嗯都是热闹的日子。

    而且,我还发现一个有趣的现象,就是从第41周到51周左右,说说的数量有一个变化规律是先减少在增加然后再减少等波浪式,我猜测,41,45,48周应该在某个月的月初左右。查了一下,果然第41周是10月月初,45周是11月月初,48周是11月月末。难道因为月初大家可以获得新的流量包,有资本活跃发说说。。。请原谅我的穷酸@( ◕ x ◕ )@,哈哈,开个玩笑。

  5. 好友的关系网络

    boss来了,我感觉只是整个项目中最有意思的地方了
    刚用上微信就半年左右,我爸爸就觉得:只有跟你关系好的人才会看你的微信朋友圈,给你评论。。。(所以他现在每发个朋友圈都看看有没有人给他点赞)。所以我觉得可以通过说说的点赞及评论的信息来了解两位好友之间关系密切度。虽然我觉得微信比QQ更正式,更能反映出关系网,但是通过研究QQ好友的评论的方式还是可以了解他们间关系强弱的。

    所以使用一下规则:

    • 点赞:两者之间的关系 +1
    • 评论:两者之间的关系 +2

    其实可以根据自己的理解再进行细分,比如对方有没有回评,以及要不要区分A对B的点赞和B对A的点赞这两种关系。

    在初次实现的过程中,秉着“先让代码跑起来”的原则,选择了上面最简单的形式,并且不区分A对B和B对A,都把他们算到一个关系值上。

    采用的数据表现形式是关系图,此处墙裂推荐百度的**Echarts**,做比较常规的图表特别容易上手,可以在线制作,比较方便。

    将之前爬好的数据经过简单的分析就可以得到下面的关系图

    其中:点表示一个QQ好友,两点间的连线表示这两个好友之间有过点赞或者评论,线的粗细表示关系的强弱。

    图中明显分为两大聚集,为有较强关系的群体。其中一个是我的高中同学们,一个是我的大学同学们。其余的几个圆点被孤立飘逸在外围,应该处于我的人际关系的边缘。虽然上面的关系图中并没有我自己的数据,但是有意思的是,高中同学群体和大学同学群体居然也能通过其他的人连接起来(°o°;),让我很是惊喜,查看了一下关系发现是我的一个高中学妹,而且人缘很广的那种,也是厉害了。

结束


自己挖的坑终究还是自己去填,好在在大学最后一个寒假的最后一天前,已基本填平。可能还有很多细节还没有考虑到位,留到以后慢慢修。

元宵快乐*o*

爬取并分析QQ好友的说说相关推荐

  1. python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)

    python爬取网页版QQ空间,生成词云图.柱状图.折线图 最近python课程学完了,琢磨着用python点什么东西,经过一番搜索,盯上了QQ空间,拿走不谢,欢迎点赞收藏,记得github给个sta ...

  2. [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱

    本文改自 [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱 之前写的爬虫单子,代码已经跑了快3个月了,后续又增加了一些需求,修改了一些小bug ...

  3. 2019FME博客大赛——为数据而生的FME - 腾讯人口迁徙数据爬取与分析

    参赛单元:互联网.大数据及云计算 作者:刘啸 单位:上海垣观数据科技有限公司 随着信息技术的发展,大数据的概念越来越引发人们的关注,各种有关于城市的新数据类型也不断涌现,为客观认识城市系统并总结其发展 ...

  4. 英雄联盟《双城之战》视频弹幕爬取并分析输出词云

    目前,拳头制作的英雄联盟首部动画作品<双城之战>在腾讯视频独家播出.而事实再次证明,拳头是一家被游戏耽误的动画公司,<双城之战>首映非常成功,豆瓣评分9.2,5星评价占67.5 ...

  5. Hadoop笔记之十七——爬虫框架scrapy实际案例(爬取安卓版QQ阅读)

    话不多说,我们的目的: 使用scrapy爬取安卓版QQ阅读所有的小说(只是小说的基本信息,小说内容是不要想的.千万不要想--) 环境准备 安卓收集模拟器:夜神模拟器 安卓手机抓包工具:fiddler ...

  6. python分析b站_Python爬取并分析B站最热排行榜,我发现了这些秘密

    现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...

  7. 爬取及分析天猫商城冈本评论(二)数据处理

    前言 根据之前我写的 爬取及分析天猫商城冈本评论(一)数据获取 方法,爬取了冈本旗舰店的所有避孕套产品的公开评论,共计30824条. 这次对这3万多条评论去做数据分析前的预处理. 数据值处理 对于搜集 ...

  8. php爬虫:知乎用户数据爬取和分析

    php爬虫:知乎用户数据爬取和分析 2016-04-10    PHP开发者     (点击上方公众号,可快速关注) 作者:崔小拽        原文链接:http://cuihuan.net/art ...

  9. python爬取抖音用户数据的单位是_爬取并分析一下B站的最热视频排行榜,看看大家都喜欢看什么视频...

    前言 现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉 ...

最新文章

  1. 设计模式 命令模式 之 管理智能家电
  2. 若川诚邀你加源码共读群,帮助更多人学会看源码~
  3. linux php curl.so,linux中php如何安装CURL扩展方法
  4. 【代码升级】【iCore3 双核心板】例程二十八:FSMC实验——读写FPGA
  5. MATrICP论文解读
  6. phantomjs php 登录,PHANTOMJS PHP:空响应对象
  7. hashmap put复杂度_你碰到过几种HashMap在高并发下出现的问题,哪些可能出现的问题...
  8. RealView MDK在链接时提示空间不够的解决方案总结
  9. 关于反射中.getDeclaredContructor()返回构造方法顺序的问题(转)
  10. 多变量微积分笔记5——梯度与方向导数
  11. 企业微信获取临时素材,此处接口为语音接口
  12. java 进销存 crm websocket即时聊天发图片文字 好友群组 SSM源码
  13. Windows Server 2016-Powershell之客户端加域
  14. zkSnarks:QAP上构造零知识证明
  15. 空间3点求三点所在空间圆的圆心空间坐标
  16. java帮助文档mye_【SpringMVC】使用Myeclipse创建SpringMVC项目【超详细教程】
  17. centos之dd命令
  18. Android:简易的单词本(一)
  19. 多传感器融合定位ch1
  20. 微信小程序:打开设置(权限)页面

热门文章

  1. matlab flatten,Numpy中扁平化函数ravel()和flatten()的区别
  2. f2fs学习笔记 - 5. f2fs基本类图
  3. 安装design compiler的教程
  4. 深度解析卡尔曼滤波在IMU中的使用
  5. (新 ※必看)解决VMware由于卸载不干净导致安装出现“用户在命令行上发出了 EULAS_AGREED=1,表示不接受许可协议。”
  6. mysql htap 开源_基于开源应用快速构建HTAP系统
  7. 2020年3月27日 失眠问题解决之道 ~ 观想法①
  8. viper4android io错误,viper操作文档
  9. linux根分区写保护,目录写保护,求助大神
  10. IOS开发之——更换Storyboard