• Stars
    star
    520
  • Rank 85,117 (Top 2 %)
  • Language
    Python
  • License
    MIT License
  • Created over 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

QQZone mood spider and analysis. QQ空间多线程爬虫和数据挖掘。提供线上服务,扫码登陆即可自动爬取和分析数据,还有网易云年度报告风格的数据展示;使用docker-compose打包程序,方便部署;额外提供QQ空间抽奖小程序。

QQZoneMood

体验地址:

  1. app.xiaomaidong.com
  2. qzone.xiaomaidong.com

相关博客

QQ交流群

群号:707583419

如果在使用中遇见bug,或者关于项目有什么想法,欢迎在群中交流

简介

  • 多线程抓取QQ空间说说内容并进行分析,提供基于Flask和avalon.js的web配置界面,以及配套的测试用例

  • 基于React Slides的数据展示页面,风格模仿网易云年度报告。子项目地址:QQZoneSwipper

  • 提供抽奖小程序,可以根据指定说说的点赞或评论信息进行随机抽奖(可单独打包为windows下的命令行程序)

  • 反向计算用户在每个时间点的好友数量,并可动态展示用户好友的增加过程,参考视频

系统架构图

部署注意事项

  • 在本地分别启动后端和前端,端口号分别默认为5000和3000

  • 修改 QQZoneMood/src/web/static/constant.js中QQ_FRONT_LOCATION变量为前端地址,如

    http://localhost:3000

  • 修改 QQZoneSwipper/src/utils/constant.js中SERVER_HOST变量为后端地址,如:

    http://localhost:5000

注意url末尾都不要加斜杠(/)

docker版简介

  • 本项目将网页配置版本打包为docker(以下简称docker版),本版本用于部署到线上

  • 此外,还有大量已完成的功能(爬取好友的动态、爬取图片等)未进行整合

  • docker版主要包括以下功能:

    1.配置用户名、QQ号、校验码

    2.根据1中配置获取QQ空间的动态数量和好友基本信息

    3.数据可视化

  • 运行方式(请确保已经安装了docker和docker-compose):

    1.git clone https://github.com/Maicius/QQZoneMood.git

    2.将 QQZoneMood/src/web/static/constant.js中QQ_FRONT_LACTION 修改为自己的前端项目地址(本地默认地址为localhost:3000)

    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

  • 关于校验码

    相当于用户在该网站的密码,为了安全请不要与QQ密码相同。设置校验码的目的是为了保证用户在该网站上只能查看自己的数据。

开发版运行方式

  • 0.下载

    git clone https://github.com/Maicius/QQZoneMood.git

    cd QQZoneMood

  • 1.安装依赖

    pip3 install -r requirements.txt

    (不建议使用conda,因为sha1等库在conda的源中没有)

  • 2.修改配置文件

    修改userinfo.json.example为文件userinfo.json,并填好QQ号、QQ密码、保存数据用的文件名前缀;

    [可选]修改需要爬取的好友的QQ号和保存数据用的文件名前缀

  • 3.__init__函数参数说明,请根据需要修改(所有参数都有默认值,即使不修改任何参与也能运行)

      def __init__(self, use_redis=False, debug=False, mood_begin=0, mood_num=-1, stop_time='-1',
               download_small_image=False, download_big_image=False,
               download_mood_detail=True, download_like_detail=True, download_like_names=True, recover=False,
               cookie_text=None, from_web=False, username='', nickname='', no_delete=True, pool_flag='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 stop_time: 停止下载的时间,-1表示全部数据;注意,这里是倒序,比如,stop_time="2016-01-01",表示爬取当前时间到2016年1月1日前的数据
      :param recover: 是否从redis或文件中恢复数据(主要用于爬虫意外中断之后的数据恢复)。注意!!!此功能在多线程中不可用!!!
      :param download_small_image: 是否下载缩略图,仅供预览用的小图,该步骤比较耗时,QQ空间提供了3中不同尺寸的图片,这里下载的是最小尺寸的图片
      :param download_big_image: 是否下载大图,QQ空间中保存的最大的图片,该步骤比较耗时
      :param download_mood_detail:是否下载动态详情
      :param download_like_detail:是否下载点赞的详情,包括点赞数量、评论数量、浏览量,该数据未被清除
      :param download_like_names:是否下载点赞的详情,主要包含点赞的人员列表,该数据有很多都被清空了
      :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服务器

    python3 src/web/server.py

  • 5.其它程序入口可以参考test中测试用例

已实现功能

1.基本功能

这部分主要是获取数据和进行基本的统计分析

  • QQ空间动态爬取,包括:

    1. 所有说说信息
    2. 每条说说的详细信息(比1中的信息更全面,1中数据只显示每条说说的前10个评论)
    3. 每条说说的点赞人列表
    4. 更加详细的点赞人列表(3中获取的数据有很多被清空了,这里能稳定获取到点赞的人数量、浏览量和评论量)
    5. 所有说说的图片(可选择是下载大图、缩略图还是都下载)
  • QQ空间好友基本信息爬取

    1. 好友基本信息
    2. 共同好友数量
    3. 共同群组
    4. 添加好友时间(可计算出用户在每个时间点的好友数量)
  • 数据分析

    1. 数据清洗,将所有抓取的信息清洗为excel或csv
    2. 包括各种点赞排行、评论排行、发送时间统计等
    3. 历史说说一览表
  • 数据可视化

    包括各种词云图、关系图

  • Web配置界面

    使用Flask + avalon.js + echarts.js 搭建的简易web界面,为普通用户提供一个快速获取数据的方法

    可视化爬虫过程

    可视化用户数据、历史说说记录

2.衍生功能(这部分功能的代码没有完全添加到项目里)

项目结构

说明如下:

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秒暂停,以手动完成验证

  • 数据存储方式:

    目前提供了两种存储方式的接口(通过Spider中use_redis参数进行配置):

    1. 存储到json文件中
    2. 存储到redis数据库中
      如果安装了redis,建议存储到redis中
      关于redis的安装和配置,请自行搜索
      Redis使用中常见问题可以参考这篇博客:Redis 踩坑笔记
  • 注意

    程序提供了三种登陆的接口,分别是扫码登录、cookie登录、账号密码模拟登录,默认使用扫码登录 其中账号密码模拟登录依赖于selenium,需要手动下载chrome driver和chrome浏览器
    请注意版本匹配,可以查看这篇博客:
    selenium之 chromedriver与chrome版本映射表(更新至v2.32)

  • 运行结果例图: IMAGE image Image Image3 Image QQ好友成长图 抽奖小工具

QQ动态关键字词云

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

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

mobile

手机端运行截图

Image

使用Gephi软件生成的好友关系图

More Repositories

1

WebLogsAnalysisSystem

A big data platform for analyzing web access logs
Java
49
star
2

UniversityRecruitment-sSurvey

用严肃的数据来回答“什么样的企业会到什么样的大学招聘”?
Python
40
star
3

IntelligentMachine

天池工业AI大赛-智能制造质量预测,排名89/2539
Python
32
star
4

StereoCamera

双目测距,即利用左右相机拍摄同一物体获得的不同视差来判断物体到摄像机的距离,这其中涉及摄像机标定、极线恢复、校正、立体匹配等算法
C++
30
star
5

QQZoneSwipper

模仿网易云年度报告风格的QQ空间数据分析展示页面,使用React做了模块化
CSS
21
star
6

PhotoWall

Just sort out the photos and generate the photo wall with one click; Realize the alignment of a large number of photos of any scale without stretching and masking the photos; Completed by JS / CSS only, independent of node or server.只需整理好照片,一键生成照片墙;在不对照片进行拉伸和遮掩的前提下,实现对任意比例的大量照片对齐;单纯由js/css完成,不依赖于node或服务器
CSS
13
star
7

UserBehavior

CIKM 2019 EComm AI:用户行为预测数据挖掘竞赛,第一次做推荐系统相关的比赛,犯了很多错误,没有进复赛
Python
11
star
8

SSM_Redis_Template

An template based on Maven, using Spring + Spring MVC + mybatis + spring-data-redis frames. It can be used to construct a new Java Web Appliaction quickly
Java
10
star
9

NcovWeRobot

基于itchat,使用个人微信账户,利用爬虫信息从网络上搜集实时疫情数据,用户通过微信消息进行订阅,若出现相关信息,则主动对用户进行推送。可根据用户指令监控群聊,对群内出现的新闻、分享、图片自动进行辟谣。
Python
8
star
10

DCTInformationHiding

基于离散余弦变换(DCT)的信息隐藏,包括预处理、隐藏、提取
MATLAB
4
star
11

DataMiningAlgorithm

Some data mining algorithms, ANN, KNN and NavieBayes. Data sets is 'titanic.dat'
Python
4
star
12

NIMA4Images

修改model zoo 中的google nima 模型的pytorch实现,增加对批量图片的测试
Python
4
star
13

Wake_client

An internet community based on alarm clock,which provides quantitative data reference for the user's sleep
Java
4
star
14

ALBertKMeans

使用Albert对文本编码,再用kmeans进行聚类
Python
3
star
15

HiredisTest

测试C++ Hiredis库
C++
3
star
16

DrivingCycle

第十六届华为杯全国研究生数学建模D题--汽车行驶工况构建
Python
3
star
17

PhotoGallery

使用Avalon.js + jQuery实现的照片墙,可以做到任何大小的图片都对齐,并可以点击查看大图
JavaScript
3
star
18

ConvertImage

将指定路径下的单反等设备拍摄的高清大图批量转换为适合网页的预览图和宽1920左右的图片
Python
3
star
19

TargetOffer

剑指offer刷题
C++
2
star
20

AccPython

关于Python在计算密集型任务中的加速经验总结
Jupyter Notebook
2
star
21

UndergraduateStudentsNationalInnovationProject

国家级大学生创业创业训练计划调查
Python
2
star
22

RegExercise

正则表达式教程,博客地址:http://www.xiaomaidong.com/?p=426
Python
2
star
23

CheckMariadb

一个用于检测数据库是否崩掉并重启的脚本(阿里云的轻量级服务器CentOS下的mariadb总是莫名奇妙的崩掉)
Python
1
star
24

Spring_course

the courses of Java Spring
Java
1
star
25

AdvanceAlgorithm

Homework of advance algorithm, nju
Python
1
star
26

CloudComputingExercise

Homework of data cloud computing, nju
Python
1
star
27

QQZoneMoodTextClassfication_RNN

使用RNN对QQ空间对动态进行文本分类,数据集是自己标记的
Python
1
star
28

FriendCluster

对用户好友(QQ和微信)进行聚类
Python
1
star
29

PersonalWeb

个人网站,包括前端和后端
JavaScript
1
star
30

Latex_exercise

latex 练习
TeX
1
star
31

TWHomeProject2018

Thoughtworks 2018校园招聘作业
Java
1
star