不要急,不要怕

python云图——聊天记录

需要工具:

  1. python编辑器,我用的是pyCharm
  2. iOS设备管理工具iMazing

先上成果

害羞,把图换成大中国了

下面是详细的步骤了,

1.获取聊天记录的数据库

打开我们的iMazing,
点击应用程序,选择微信

点击备份
点击微信后的样子

点击/Documents/9~~~05/DB/MM.sqlite,中间这个文件夹名字都不一样,不过也没几个乱码文件夹,除去000000000的一个一个试,找到DB文件夹,这个电饭锅就是我们要找的数据库

保存聊天记录的数据库

以上部分学习于这个地址,大家可以去看看。

2.数据库处理,获取目标人物的聊天记录

首先先将刚刚找到的数据库复制到目录中,
目录结构
然后找一个图片模版,这里把我的放上来,记得把名字改为yy.jpeg哦,还有,生成词云的文字颜色和图片以前的颜色是一样的,所以要找一个色彩丰富的图片
心图片

好了,接下来就是获取目标人物的聊天记录的,话不多说,直接上代码:

import sqlite3
import pandas as pd

conn=sqlite3.connect('%s' %'./MM.sqlite') #连接数据库
cur=conn.cursor()
query = "SELECT name FROM sqlite_master WHERE     type='table' order by name" #查询所有表名
a = pd.read_sql(query, conn)
result = []
    for i in a.name: #开始遍历所有表查找女票(的聊天记录)藏身之处
query3 = "SELECT * FROM %s" %(i)
r = pd.read_sql(query3, conn)

if 'Message' in r.columns:
    for j in r.Message:

        if j and j.find('晚安啦')!= -1:#注1,关键的一步
            print('要求的id',i)#Chat_f2f79f4861cc4168f0600517f5d7521c
            result.append(i)
            break


query4 = "SELECT * FROM %s" %(result[0]) #注1那步完成得好,result就会只有一个元素

meOwn = []
own = pd.read_sql(query4, conn)#过滤一些关键词
if 'Message' in own.columns:
    for j in own.Message:
        if j and j.find('msg')!=-1:#去掉图片视频信息
                j = ''
        if j and j.find('[')!=-1:#去掉表情包
                j = ''
        meOwn.append(j)


# text = pd.read_sql(query4, conn)
# text = list(text.Message) #注2

full_text = '\n'.join(meOwn) #将text这个列表合并成字符串,以回车符分隔
f = open('./comde', 'w')
f.write(full_text)
f.close()

这时我们点开上边的comde文本,如果不出意外的话,里面就是我们所要的的聊天记录了。

3.生成词云

这一步相对于要简单一些了,

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import pickle
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import jieba
import codecs

text = ''

# yy.txt 是聊天记录的文本文件
with open('comde') as fin:
    for line in fin.readlines():
        line = line.strip('\n')
        text += ' '.join(jieba.cut(line))
        text += ' '

# yy.jpg 是图片文件
backgroud_Image = plt.imread('yy.jpeg')

wc = WordCloud(background_color='white',

               mask=backgroud_Image,
               max_words=400,
               stopwords=STOPWORDS,
               font_path='/System/Library/Fonts/STHeiti Light.ttc',  # 设置字体格式
               max_font_size=350,  # 设置字体最大值
               random_state=40  # 设置有多少种随机生成状态,即有多少种配色方案
               )


wc.generate(text)
image_colors = ImageColorGenerator(backgroud_Image)
wc.recolor(color_func = image_colors)

plt.imshow(wc)
plt.axis('off')
wc.to_file("result1.jpg")

好了,到当前文件夹下看一下,是否有一张新的图片,名字是result1.jpg,这里要注意生成的图片名字不能和模版的一样,不然会代替模版图片的。