QQZone mood spider and analysis. QQ空间多线程爬虫和数据挖掘。提供线上服务,扫码登陆即可自动爬取和分析数据,还有网易云年度报告风格的数据展示;使用docker-compose打包程序,方便部署;额外提供QQ空间抽奖小程序。
QQZoneMood
体验地址:
相关博客
QQ交流群
群号:707583419
如果在使用中遇见bug,或者关于项目有什么想法,欢迎在群中交流
简介
- 多线程抓取QQ空间说说内容并进行分析,提供基于Flask和avalon.js的web配置界面,以及配套的测试用例
- 基于React Slides的数据展示页面,风格模仿网易云年度报告。子项目地址:QQZoneSwipper
- 提供抽奖小程序,可以根据指定说说的点赞或评论信息进行随机抽奖(可单独打包为windows下的命令行程序)
- 反向计算用户在每个时间点的好友数量,并可动态展示用户好友的增加过程,参考视频

系统架构图

部署注意事项
- 在本地分别启动后端和前端,端口号分别默认为5000和3000
- 修改 QQZoneMood/src/web/static/constant.js中QQ\FRONT\LOCATION变量为前端地址,如
- 修改 QQZoneSwipper/src/utils/constant.js中SERVER\_HOST变量为后端地址,如:
注意url末尾都不要加斜杠(/)
docker版简介
- 本项目将网页配置版本打包为docker(以下简称docker版),本版本用于部署到线上
- 此外,还有大量已完成的功能(爬取好友的动态、爬取图片等)未进行整合
- docker版主要包括以下功能:
> 2.根据1中配置获取QQ空间的动态数量和好友基本信息
> 3.数据可视化
- 运行方式(请确保已经安装了docker和docker-compose):
> 3.cd QQZoneMood & docker-compose up -d > 4.下载前端子项目 > git clone https://github.com/Maicius/QQZoneSwipper > 5.将 QQZoneSwipper/src/utils/constant.js中的SERVER_HOST修改为服务器的地址(本地默认地址为localhost:80) > 6.启动前端子项目,请确保已安装了npm > cd QQZoneSwipper & npm install --save & npm run start > 7.浏览器里输入地址: http://localhost:80
- 关于校验码
开发版运行方式
- 0.下载
> cd QQZoneMood
- 1.安装依赖
- 2.修改配置文件
- 3.\\init\\函数参数说明,请根据需要修改(所有参数都有默认值,即使不修改任何参与也能运行)
def init(self, useredis=False, debug=False, moodbegin=0, moodnum=-1, stoptime='-1', downloadsmallimage=False, downloadbigimage=False, downloadmooddetail=True, downloadlikedetail=True, downloadlikenames=True, recover=False, cookietext=None, fromweb=False, username='', nickname='', nodelete=True, poolflag='127.0.0.1'):
:param use_redis: If true, use redis and json file to save data, if false, use json file only. :param debug: If true, print info in console :param mood_begin: 开始下载的动态序号,0表示从第0条动态开始下载 :param mood_num: 下载的动态数量,最好设置为20的倍数 :param stoptime: 停止下载的时间,-1表示全部数据;注意,这里是倒序,比如,stoptime="2016-01-01",表示爬取当前时间到2016年1月1日前的数据 :param recover: 是否从redis或文件中恢复数据(主要用于爬虫意外中断之后的数据恢复)。注意!!!此功能在多线程中不可用!!! :param downloadsmallimage: 是否下载缩略图,仅供预览用的小图,该步骤比较耗时,QQ空间提供了3中不同尺寸的图片,这里下载的是最小尺寸的图片 :param downloadbigimage: 是否下载大图,QQ空间中保存的最大的图片,该步骤比较耗时 :param downloadmooddetail:是否下载动态详情 :param downloadlikedetail:是否下载点赞的详情,包括点赞数量、评论数量、浏览量,该数据未被清除 :param downloadlikenames:是否下载点赞的详情,主要包含点赞的人员列表,该数据有很多都被清空了 :param from_web: 表示是否来自web接口,如果为True,将该请求来自web接口,则不会读取配置文件 :param username: 在web模式中,传递过来的用户QQ号 :param nickname: 在web模式中,传递过来的用户昵称 :param no_delete: 是否在redis中缓存数据,如果为True,则不会删除,如果为False,则设置24小时的缓存时间 :param pool_flag: redis的连接池host,因为docker中host与外部不同,所以在启动程序时会自动判断是不是处于docker中
- 4.运行flask服务器
- 5.其它程序入口可以参考test中测试用例
已实现功能
1.基本功能
这部分主要是获取数据和进行基本的统计分析
- QQ空间动态爬取,包括:
- QQ空间好友基本信息爬取
- 数据分析
- 数据可视化
- Web配置界面
2.衍生功能(这部分功能的代码没有完全添加到项目里)
- QQ空间动态情感检测
- QQ空间照片评分
- QQ空间好友关系演变图
项目结构

说明如下:
resource:存放数据文件(不包括web中的静态资源)
src-spider:包括四个爬虫类和一个入口
- BaseSpider(object): 爬虫基类,初始化各种变量和提供基础接口,统一管理爬虫的headers、数据的加载和存储
- QQZoneSpider(BaseSpider):爬取QQ空间动态的主要逻辑,包括各种url的构建
- QQZoneFriendSpider(QQZoneSpider): 爬取用户的好友基本信息和共同群组,计算用户在各个时间段的好友数量
- QQZoneFriendMoodSpider(QQZoneSpider):爬取用户指定好友的动态
- main: 程序入口,为web程序提供爬虫API
src-analysis:
- QQZoneAnalysis: 数据清洗,将爬虫得到的原始数据清洗为excel形式,并做简单的数据统计和分析
- Average: 计算平均评论量、点赞量、浏览量等数据
- SentimentClassify: 调用百度人工智能API进行情感分类
- TrainMood:已废弃,以前计划用来对文本内容分类等等
src-visual:
- CreateGexf: 将用户好友数据生成Gephi软件可以接受的数据格式以进行聚类
src-web:网站模块
- src-web-entity: 实体类
- static: 静态资源,外部引用的包主要使用cdn
- templates:网页
其它说明
- python版本:3.6
- 模拟登陆时若出现图形验证码,可以在点击登陆后设置5秒暂停,以手动完成验证
- 数据存储方式:
- 注意:
- 运行结果例图:
QQ动态关键字词云

QQ空间说说按点赞和评论数分类图

手机端运行截图
使用Gephi软件生成的好友关系图