从安卓手机ROOT提取微信聊天记录到利用Python进行词云分析全过程

原创 2018年01月06日 13:07:39

从安卓手机ROOT提取微信聊天记录到利用Python进行词云分析全过程

刚刚来到了2018年,正值女票生日将近。想想这一年来我俩的聊天记录也不少(导出后一看十个月的微信文字聊天记录将近8万条 ^-^),于是就有了将我们的聊天记录导出来制作成词云,或者分析一下她说的最多的一句话是什么?还打算做个预测模型,输入一个句子然后让模型预测下是她说的还是我说的,哈哈,想想还有点小激动呢。其中的一个难点在于微信的聊天记录不能直接导出,需要手机root后再用数据库解密才行,由于以前对手机root不熟悉,什么线刷、卡刷、成砖等概念也略模糊,这个过程也是我花时间最长的地方。加班加点一共折腾了两天,总算是有点小成果,下面跟大家分享一下这个过程中踩过的坑以及整个流程,相信能给以后有这种想法的人一点借鉴。第一次写,不喜勿喷。

目录

1.手机ROOT

首先声明,本人所用的手机型号为华为荣耀8 FRD-AL10。其他型号的安卓机root过程请自行百度,root完成后再接着看后面几节的内容。以下为ROOT五部曲,其他的安卓机大同小异。

1.1备份!

要root的同学注意了!一旦你有了要root 的想法,在动手之前一定要先备份。用数据线将手机连接电脑,打开开发者模式的usb调试(找不到开发者模式的在 系统设置->关于手机->版本号 处狂戳即可)。然后用华为手机助手备份通讯录、APP数据、相册等。如下图


谁说解锁不会清空手机所有数据的!我会跟你说我就是以为解锁不会清空数据所以导致手机所有数据都没了吗?没了吗?了吗?吗?
那有人就会说了,数据都被清空了还分析个p啊,洗洗睡吧!幸亏我刚好在微信电脑客户端备份了和女票了聊天记录,而且只备份了她的,导致损失一下子降到百分之十了,哈哈。有朋友想问微信聊天记录在哪备份的,见下图(备份与恢复那)


这里写图片描述

1.2 获取解锁码

首先声明一下,解锁可能会让你的手机失去保修,慎重考虑!
华为手机想要root要先解锁,点击解锁地址后,用华为账号登入,点击同意协议并下一步,这里要输入手机相关的信息来获取解锁密码。


如果你的手机系统已经升级到最新版本(EMUI5.0之后),请在第一项做相应的选择。之后的序列号等都很容易填,不会填的点相应文本框后面的如何填写即可。
点击提交后便可得到十六位解锁密码。

1.3 华为手机助手将系统回退到可以root的系统版本

在解锁前,请确保你的手机系统版本是支持root的,一般如果你已经升级到最新版的系统,那是不能root的,需要将系统回退到可以root 的旧版本。以下是目前可root的系统版本号。


切记!如果你的系统不在这上面,那就先做系统回退,再解锁!否则,你还得重新上锁做系统回退再解锁。。。可怜的我就是这样子白费了好多功夫。。
接下来是怎么做系统回退,我是将系统回退到图中的EMUI 5.0 B368。


系统回退在华为手机助手电脑端:系统更新->切换到其他版本->恢复 这样它会退到刚买的新手机时的版本,之后我们同样在系统更新这里再将其升级到5.0 B368版本。




1.4 下载fastboot并解锁

先下载adb 工具包链接在这,然后按照官网解锁教程一步一步解锁即可。
在cmd中要先用cd命令进入adb工具包的文件夹里。


1.5 用YoRoot_V1.1一键root

一键root的教程请移步这里,这里说的很清楚明白。当然,有些人在这里一下就成功了,有些人在这会出现各种莫名的问题,我就属于后者,各位就各安天命,如果实在有解决不了的问题,那就花点钱请人帮忙吧。在这随便展示几张图仅供参考





仅针对荣耀8的手机root部分就讲到这了,以下部分就是通用的了。

2.提取微信聊天记录并导出

这部分参考知乎上DADAman的高票回答来做。但是!其中有一些坑我说一下,供各位参考。

2.1 首先

针对评论中提到的新版微信的uin存放的文件夹改变的事,我觉得在Chrome采用抓包的查看方式更方便,请看这里

2.2 其次

有相当相当多的人在评论中提到,通过IMEI和UIN得到的数据库密码不对!如下图,这个问题我也纠结了好久好久,看到下图,一开始我以为IMEI和UIN之间要用“-”分隔。实际上,原来楼主的uin是负数,所以造成了这种假象,我们要做的只需要把两者直接连到一起,中间不需要任何分隔符。
这里写图片描述

2.3 最后

原文中的sql语句只能显示结果,并不能导出到csv或者txt文件。评论中有相当一部分人烦恼这个问题。经过探索,我发现要将查询语句换成创建表的sql语句,代码如下:

create table 聊天记录 as select datetime(subStr(cast(m.createTime as text),1,10),'unixepoch', 'localtime') as theTime,
case m.isSend when 0 then r.nickname when 1 then '我'end as person,
m.content
from message m inner join rcontact r
on m.talker = r.username
where m.type=1 and r.nickname='对方微信昵称';

执行之后就会创建“聊天记录”这个表,通过 File->Export->Table as csv File 找到“聊天记录”并导出。
这里写图片描述

3.用Python制作词云

直接上code,不解释。
额,还是说明一下,由于聊天记录中不仅有文字,还有各种奇怪的表情符号,因此,‘gbk’不能解码时,可以用解码能力更广的‘gb18030’解码。

3.1 探索数据

首先,导入pandas解析上一节导出的聊天记录
这里写图片描述

接下来,来看看我们说的最多的话和次数 -^–^-
带有中括号的表示表情符号
“。。。”居然说的比晚安还多,我擦


还好有些话就说了1次,吓死宝宝了。。


好啦,不逗比了,开始制作词云吧

3.2 准备工作

制作词云需要引入wordcloud包和中文分词包jieba。不会安装的看这里。jieba安装更简单,直接输入:pip install jieba

###将各自的话分开保存####
df1 = df[df.person=='我']
df2 = df[df.person=='Pluto']
df1.content.to_csv('MyWords.txt',index=False)
df2.content.to_csv('HerWords.txt',index=False)

####自定义词云色调#########
#自定义调色调的
from numpy import  *
def color_func(word, font_size, position, orientation, random_state=None, **kwargs):
    """
    :param word:
    :param font_size:
    :param position:
    :param orientation:
    :param random_state:
    :param kwargs:
    :return:
    Description:
        调配词云中文字的颜色
    """
    return "hsl(210, 100%%, %d%%)" % random.randint(10, 80)  # 这里以蓝色为基本色调

3.3 生成词云

###生成她的词云###############
from wordcloud import WordCloud,ImageColorGenerator
import codecs
import jieba.finalseg
#import jieba.analyse as analyse
from scipy.misc import imread
import os
from os import path
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont


# 绘制词云
def draw_wordcloud():
    #读入一个txt文件
    comment_text = open('HerWords.txt','r',encoding='utf-8').read()
    #结巴分词,生成字符串,如果不通过分词,无法直接生成正确的中文词云
    cut_text = " ".join(jieba.cut(comment_text))
    #d = path.dirname(__file__) # 当前文件文件夹所在目录
    color_mask = imread("爱心.jpg") # 读取背景图片
    cloud = WordCloud(
        #设置字体,不指定就会出现乱码
        #font_path="hwxk.ttf",
        font_path = 'C:/Users/Windows/fonts/msyh.ttf',
        #font_path=path.join(d,'simsun.ttc'),
        #设置背景色
        background_color='white',
        #词云形状
        mask=color_mask,
        #允许最大词汇
        max_words=2000,
        #最大号字体
        max_font_size=40
    )
    #print(cut_text)
    word_cloud = cloud.generate(cut_text) # 产生词云
    word_cloud.to_file("herWordCloud.jpg") #保存图片
    #  显示词云图片
    plt.imshow(word_cloud)

    #使词云颜色跟背景图片颜色一致
    img_color = ImageColorGenerator(color_mask)
    #word_cloud_color = cloud.recolor(color_func=img_color) #图片色调
    word_cloud_color = cloud.recolor(color_func=color_func) #自定义色调
    plt.imshow(word_cloud_color)
    word_cloud_color.to_file("herWordCloud_color.jpg")

    plt.axis('off')
    plt.show()
draw_wordcloud()
########生成我的词云#############
from wordcloud import WordCloud,ImageColorGenerator
import codecs
import jieba.finalseg
#import jieba.analyse as analyse
from scipy.misc import imread
import os
from os import path
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont


# 绘制词云
def draw_wordcloud():
    #读入一个txt文件
    comment_text = open('MyWords.txt','r',encoding='utf-8').read()
    #结巴分词,生成字符串,如果不通过分词,无法直接生成正确的中文词云
    cut_text = " ".join(jieba.cut(comment_text))
    #d = path.dirname(__file__) # 当前文件文件夹所在目录
    color_mask = imread("爱心.jpg") # 读取背景图片
    cloud = WordCloud(
        #设置字体,不指定就会出现乱码
        #font_path="hwxk.ttf",
        font_path = 'C:/Users/Windows/fonts/msyh.ttf',
        #font_path=path.join(d,'simsun.ttc'),
        #设置背景色
        background_color='white',
        #词云形状
        mask=color_mask,
        #允许最大词汇
        max_words=2000,
        #最大号字体
        max_font_size=40
    )
    #print(cut_text)
    word_cloud = cloud.generate(cut_text) # 产生词云
    word_cloud.to_file("MyWordCloud.jpg") #保存图片
    #  显示词云图片
    plt.imshow(word_cloud)

    #使词云颜色跟背景图片颜色一致
    img_color = ImageColorGenerator(color_mask)
    #word_cloud_color = cloud.recolor(color_func=img_color) #图片色调
    word_cloud_color = cloud.recolor(color_func=color_func) #自定义色调
    plt.imshow(word_cloud_color)
    word_cloud_color.to_file("MyWordCloud_color.jpg")
    plt.axis('off')
    plt.show()
draw_wordcloud()

此处解释一下,如果想生成特定形状的词云,需要一张图片,如代码中的“爱心.jpg”。该图片必须以白色为背景,则生成的形状为该图非白色区域。至于怎么得到这样一张白色背景,特定形状的图片,有很多p图软件可以做到,比如最简单的美图秀秀。。。

3.4 词云效果

分享下我生成的几张图








后面会更新利用朴素贝叶斯模型,输入一句话预测是我说的还是女票说的,请移步这里

Android逆向之旅---静态方式破解微信获取聊天记录和通讯录信息

微信现在是老少皆宜,大街小巷都在使用,已经替代了传统的短信聊天方式了,只要涉及到聊天就肯定有隐私消息,那么本文就来讲解如何获取微信的聊天记录以及通讯录信息...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2016年08月22日 08:59
  • 26173

Android 获取取手机中微信聊天记录

关于如何在 Android 手机上窃取微信聊天记录。 这几天事情比较多,可还是想尽快写下这篇文章。 本以为微信的聊天记录以我本人现存能力获取不到,但经过一番尝试,还是成功了。前提:手机需要已经 ...
  • f2006116
  • f2006116
  • 2016年04月06日 11:15
  • 10223

微信聊天记录导出小试

现在微信聊天变得极其普遍,家人关心、同学寒暄甚至同事工作安排都在微信里面....     换手机,可是微信的数据自己还蛮重要,比如有一些联系方式、记录的问题讨论过程等等等,殊不知哪天就要发出来看看了...
  • kuluzs
  • kuluzs
  • 2016年06月01日 18:23
  • 1234

用R语言做自己的微信聊天记录词云

心血来潮,想做一个微信聊天记录词云,于是就动手了。 最后的效果如下图所示 啊……我真的是一个爽朗的女孩子。 好了,下面就是步骤啦~ 请多多指教。 第一步:导出微信聊天记录。 我使用的...
  • bushijiangshan
  • bushijiangshan
  • 2017年12月12日 14:05
  • 734

微信小程序-词云图片

最近上线了一款词云小工具,词云图片,服务端主要用了python的wordcloud库生成的词云, 关于wordcloud的详细介绍大家可以去官网学习 http://amueller.github....
  • samll_snail
  • samll_snail
  • 2017年12月08日 13:04
  • 672

关于手机微信的聊天记录在手机中的存放位置及关系

1.手机微信记录的图片及语音文件存放目录:/sdcard/Tencent/MicroMsg/名称为'32位字符串'的文件夹/ PS: 32位字符串的名称是根据微信用户的信息生成的md5加密字符串; 同...
  • jiubugeinifo
  • jiubugeinifo
  • 2016年04月22日 14:44
  • 6634

用wx聊天记录 制作词云(python)

本人初学者,看完了如何做词云的教程,试用微信聊天记录做一个demo练手。关于词云,网上有大量的教程,可随意参看,注意python的版本问题即可。 微信聊天记录导出 用到的工具是一款微信聊天记录...
  • zou249014591
  • zou249014591
  • 2017年10月18日 10:46
  • 344

使用python抓取微信好友个性签名并形成词云(itchat;wordcloud)

我主要参考这篇文章进行实践:点击打开链接 python版本:3.5 首先整体步骤分为两步:第一步,抓取好友个性签名,这一步主要依靠itchat实现;第二步,分词并形成词云,主要依靠jieba和wo...
  • hhw9307
  • hhw9307
  • 2017年07月21日 00:29
  • 1011

分享我买的p10 root 工具,确实可以使用--yoroot

  • 2017年12月17日 00:06
  • 686B
  • 下载

修改源码实现全局(无需root)注入躲开注入检测

看这篇文章需要的技能 1.会编译android源码(如果你不愿意编译源码,还有另外一种办法,下面我会提供) 2.会使用substrate或者xposed 以上2个网上资料很多我就不啰嗦了 ...
  • omnispace
  • omnispace
  • 2016年12月19日 08:39
  • 1316
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从安卓手机ROOT提取微信聊天记录到利用Python进行词云分析全过程
举报原因:
原因补充:

(最多只允许输入30个字)