首页 > qq批发小号出 > QQ朋友空间谈数据捕获和分析
2022
07-30

QQ朋友空间谈数据捕获和分析

我不知道怎么告诉你很多话。你用手机打12加59O6739154听,音乐背后是我真想对你说的话!

熟悉吗?是否唤起了一些记忆?经历过这个时代的朋友可能被愚弄了吧?

上面的文字是我QQ在朋友空间谈数据中,时间线上最早的数据是2008-03-21 16:07:30。刚学爬虫的时候,就想着能扒一扒QQ朋友的空间数据,分析自己的朋友数据。但鉴于技术过于渣滓,直到看到以下两篇文章,才能成功。感谢!

QQ空间动态爬虫

用python爬取qq朋友10万说,简单的数据分析

基本思路:

  • 开发环境:win7 python2.7
  • 采用selenium库进行人工登录,并获取到cookie信息。
  • 采用request库抓朋友谈数据,谈接口h5.qzone.qq.com/proxy/d,关键参数g_tk和g_qzonetoken参考上述两篇文章中的方法。
  • 从QQ在邮箱中导出好友qq列表,循环调用接口数据
  • 采用postgresql 存储数据
  • 分析数据工具sql excel pyecharts

本人qq由于一些朋友限制了访问权限或空间,中国共产党有515位朋友。最后抓了305个朋友谈数据142759(采集时间2017-11-18)。代码附文后!代码附文后!

btw,顺便说一句,我看了看之前的说法,真的很辣,所以全删了!

QQ朋友说按年度数据总量分布(单位:条/年)
  1. 上图显示了我朋友空间的数据分布。从2008年到2017年,数据分布跨越10年。还记得,我的QQ号码应于2005年申请,并由同学发送,O(∩_∩)O哈哈哈~但数据从2008年开始,翻阅爬虫抓取QQ谈谈和分析这位朋友的文章,发现他的数据也始于2008年。这个功能直到2008年才上线吗?
  2. 从整个分布来看,朋友们在2010年到2015年之间发表了讲话的高峰期。2008年和2009年上半年,我还是一只高中狗。我周围的大多数朋友都不在窗外。他们只想上大学。他们中的大多数人没有时间和精力说话。2009年开始上大学,朋友多了,时间多了。朋友说总量翻了三倍(捂脸,这里应该有表情包),大家真的很闲。O__O "…。自2015年以来,总数显著下降,特别是2016年数据下降特别严重,只有2014年的一半,这可能是由于微信、微博等社交应用的兴起,导致大量用户逐渐转移到其他工具,我们不再流行。
说说按年度数据总量分布(单位:条/年)

统计了自己空间的数量,从2008年到2012年都在上升。2012年和2013年,发布量非常大。这个时候是大学毕业刚上研究生的阶段。嗯,真的是闲蛋疼!2014年,出版量急剧下降。嗯,也许研究生狗压力很大。你忙着写论文吗?然而,三年内没有几篇论文(再次捂住脸)。看了看自己的微信朋友圈,发现第一个数据是2014年5月,战场转移到朋友圈。

  • 就月份而言,总量分布在12月、1月和2月份较少,高峰期为5月,低谷为2月,2月和8月有两个低谷。
  • 由于兴衰与我和朋友的学习时间重叠,可以从假期的角度来分析。从12月开始,大学逐渐开始放寒假,跨越12月、1月和2月。暑假经历了6/7/83个月。数据显示,这几个月的数据呈下降趋势,应该是qq小号游戏号批发网有道理的。
  • 与此同时,春节一般在2月份居多,2月份大家都在走亲访友,说话次数明显减少!
按周统计发表数据
  • 朋友的分布按周统计。从图中可qq小号游戏号批发网以看出,周末发表说说的数据量相较于工作日更少,这大概和很多小伙伴的周末有效时长有关,比如周末的一天是从12点开始(围笑~)。周四发表的演讲数量最多,其他工作日数量差距不大。周四是分界点,周日至周四,数据量逐渐上升,周四后开始下降。
  • 从具体的具体时间点来看,QQ朋友们更喜欢在睡觉qq小号游戏号批发网前发表状态。
  • 说说19点发表的数量。~23呈上升趋势,中午12点和晚上22点各有波峰。
  • 深夜0点~7点之间,当我们睡得很香的时候,还有一些朋友在分享他们的生活。7点以后,新的一天开始了,朋友们有了更多的新事物 :)
每年至少使用过说说功能一次的数据分布
  • 每年对小伙伴qq对数字进行去重统计,当年发表多次说说只记一次,上图显示了统计后的数据趋势。整体趋势基本证实了功能的兴衰趋势。
  • 从2008年到2013年,使用说话功能的人数呈上升趋势,2013年达到顶峰。从2008年到2012年,朋友们谈论功能的增长趋势逐渐放缓。此后,使用说话功能的小伙伴越来越少,今年只有179个小伙伴使用说话功能发布状态。
(横坐标为好友发表说说总量排名百分比,纵坐标为说说数量占比)

统计排名单个朋友的数量,最低排名发表1条,最高发表8322条!

  • 排名前10%(约30)QQ好友)发表的谈话数量占谈话总数的近50%(约70%)W条),也就是说,这30到最多的是这30个发表的动态。
  • 50%的QQ好友,贡献了90%的谈话数据,其他50%的朋友很少使用谈话功能发布状态。
说定位地点标注(全球)
说定位地点标注(国内全貌)

对QQ朋友发表的经纬度数据用于地图打点(近7000条带经纬度的数据来自200多个QQ号),如上面两图所示。

  • 在全球范围内,QQ朋友的足迹从至日本,西至美国,北至芬兰,南至马来西亚;我不禁开始怀疑我的生活。我认识这么多战壕里的朋友。为什么我还这么穷(捂着脸)。
  • 在全球范围内,QQ朋友的足迹东到日本,西到美国,北到芬兰,南到马来西亚;我不禁开始怀疑生活。我认识这么多战壕里的朋友。为什么我还这么穷(捂着脸)。芬兰北部的两个孤点不冷吗?此处要手动 @我师门小伙伴 (摊手~);非洲也有小伙伴,天啦鼾,我大概也知道这是哪个小伙伴,哈哈。。。。。
从国内角度看,QQ朋友的足迹东至舟山东极岛(多为旅游),西至新疆伊宁(朋友出差?),北上哈尔滨(QQ有的朋友在黑龙江上学),南下三亚(旅游集散中心。。。)。朋友的足迹主要在南方,西南地区相对集中,主要是因为我是南方人,在南方上学,所以大多数朋友也是南方人。
    根据定位地址所属城市频率统计(>100次)

根据定位地址所属城市的合并统计,定位次数超过100次的城市如上图所示。从图中可以看出,川渝黔云、江浙、福建、广东沿海省份定位数据量较大。


以好友QQ以定位数据为基础,根据时间顺序生成基于地理位置迁移的朋友定位时间顺序地图,如下图所示:

基于时间序列QQ好友轨迹地图

根据出发城市的频率排名TOP5

根据时间顺序生成我定位的轨迹图

QQ朋友用手机品牌排行榜

  • 通过提取数据中的表达符号,统计好友在发表演讲时对QQ表情偏好。
  • 从数据上看,QQ朋友使用最多的表情是易牙,远高于第二名的折磨表情。

从表情的情绪分类来看,常用表情TOP20中,负面情绪表情只有四种:折磨、哭、愤怒。大多数人都有积极的情绪表情。

QQ空间承载着我们学生时代的美好时光。我还记得我花了很多精力在各种网站上找衣服QQ空间插件,不亦乐乎。QQ空间走过了近十年,个人感觉QQ说说空间甚至QQ空间已经衰落,而且qq目前,我每天都承载更多的群组功能QQ95%的新闻都是群组新闻。朋友仍在频繁使用QQ说空间的小伙伴越来越少,每天刷屏我空间动态的小伙伴也只有30人左右。是时候清除那些幼稚的言论了(chou)照了~~~
import time from selenium import webdriver import requests import re,psycopg2 import json import sys reload(sys) sys.setdefaultencoding('utf-8') #根据cookie得到GTK def getGTK(cookie): hashes=5381 for letter in cookie['p_skey']: hashes =(hashes << 5) ord(letter) return hashes & 0x7fffffff #登录 def qqZoneLogin(): driver=webdriver.Chrome(此处填写自己的驱动路径) driver.get('https://qzone.qq.com/') time.sleep(10)#弹出网页后,手动输入用户名和密码,时间长短自定。建议先登录QQ,可直接快速登录,无需人工输入用户名和密码 html=driver.page_source g_qzonetoken=re.search(r'window\\\\.g_qzonetoken=\\\\(function\\\\(\\\\)\\\\{ try\\\\{return (.*?);\\\\}catch\\\\(e\\\\)',html)#从网页源码中提取g_qzonetoken #获取cookie cookies=driver.get_cookies() cookie={} for elem in driver.get_cookies(): cookie[elem['name']]=elem[& #39;value'] #计算gtk gtk=getGTK(cookie)#通过getGTK函数计算gtk return cookie,gtk,g_qzonetoken.group(1) #获取说说数据 def getQQMoodMsg(qq,cookie,gtk,qzonetoken): errornum=0 pos=0 result=True while result: try: print qq,'第',pos+1,'~',pos+20,'条说说 INFO:**********************************' headers={ 'Host': 'h5.qzone.qq.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0', 'Accept': '*/*', 'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate, br', 'Referer': 'https://user.qzone.qq.com/790178228?_t_=0.22746974226377736', 'Connection':'keep-alive' } params={ 'uin':qq, 'inCharset':'utf-8', 'outCharset':'utf-8', 'hostUin':qq, 'notice':0, 'sort':0, 'pos':pos, 'num':20, 'cgi_host':'http://taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6', 'code_version':'1', 'format':'jsonp', 'need_private_comment':'1', 'g_tk':gtk, 'qzonetoken':qzonetoken } html=s.request('GET','https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6',params=params,headers=headers,cookies=cookie) msgJson=json.loads(html.text.replace('_Callback(','').replace(');','')) if msgJson['code']==-10031: print '卧槽,进不去,没权限啊!' result=False elif msgJson['code']==0: if msgJson['usrinfo']['msgnum']==0: print '该好友无说说数据!' result=False elif msgJson['msglist']is None: print '该好友说说数据抓取完毕!' result=False else: for msg in msgJson['msglist']: print msg['name'],msg['tid'],msg['lbs']['pos_x'],msg['lbs']['pos_y'],msg['lbs']['name'],msg['source_name'],msg['created_time'],str(msg['content']).replace('\ ','').replace('\\'',''),msg['cmtnum'] sql="insert into crawler.qq_zone(qq,name,tid,pos_x,pos_y,pos_name,source_name,created_time,content,cmtnum)" \\ "values(\\'"+str(qq)+"\\',\\'"+str(msg['name']).replace('\\'','')+"\\',\\'"+str(msg['tid'])+"\\',\\'"+str(msg['lbs']['pos_x'])+"\\'" \\ ",\\'"+str(msg['lbs']['pos_y'])+"\\',\\'"+str(msg['lbs']['name']).replace('\\'','')+"\\',\\'"+str(msg['source_name']).replace('\\'','')+"\\'" \\ ",\\'"+str(msg['created_time'])+"\\',\\'"+str(msg['content']).replace('\ ','').replace('\\'','')+"\\',\\'"+str(msg['cmtnum'])+"\\')" cur.execute(sql) db.commit() else: print '未知状态码,结束该QQ号数据抓取进程!' result=False pos+=20 errornum=0 except Exception as e:#输出异常,并尝试继续请求该页面 print '发生错误了......',e errornum+=1 if errornum==5:#连续5次该页面没有响应,跳过该页 pos+=20 errornum=0 time.sleep(2) if __name__=='__main__': db=psycopg2.connect(host="localhost",user="postgres",password="postgres",database="test") cur=db.cursor() cookie,gtk,qzonetoken=qqZoneLogin()#登录 s=requests.session()#用requests初始化会话 qqlist=[该处为qq列表] for qq in qqlist: getQQMoodMsg(qq,cookie,gtk,qzonetoken) db.close()

本文》有 0 条评论

留下一个回复