使用itchat包獲取微信好友信息

import itchat
import numpy as np
import pandas as pd
from collections import defaultdict
import re
import jieba
import os
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import PIL.Image as Image

itchat.login()
friends = itchat.get_friends(update=True)
NickName = friends[0].NickName #獲取自己的暱稱
if not os.path.exists(NickName):
    os.mkdir(NickName) #爲自己創建一個文件夾

file = '\%s' %NickName #剛剛創建的那個文件夾的相對路徑
cp = os.getcwd() #當前路徑
path = os.path.join(cp+file) #剛剛創建的那個文件夾的絕對路徑
os.chdir(path) #切換路徑

number_of_friends = len(friends)
df_friends = pd.DataFrame(friends)

def get_count(Sequence):
    counts = defaultdict(int) #初始化一個字典
    for x in Sex:
        counts[x] += 1
    return counts

Sex = df_friends.Sex
Sex_count = get_count(Sex )
Sex_count = Sex.value_counts() #defaultdict(int, {0: 31, 1: 292, 2: 245})
Sex_count.plot(kind = 'bar')
Province = df_friends.Province
Province_count = Province.value_counts()
Province_count = Province_count[Province_count.index!=''] #有一些好友地理信息爲空,過濾掉這一部分人。

City = df_friends.City #[(df_friends.Province=='北京') | (df_friends.Province=='四川')]
City_count = City.value_counts()
City_count = City_count[City_count.index!='']

file_name_all = NickName+'_basic_inf.txt'

write_file = open(file_name_all,'w')

write_file.write('你共有%d個好友,其中有%d個男生,%d個女生,%d未顯示性別。\n\n' %(number_of_friends, Sex_count[1], Sex_count[2], Sex_count[0])+

                 '你的朋友主要來自省份:%s(%d)、%s(%d)和%s(%d)。\n\n' %(Province_count.index[0],Province_count[0],Province_count.index[1],Province_count[1],Province_count.index[2],Province_count[2])+
                 '主要來自這些城市:%s(%d)、%s(%d)、%s(%d)、%s(%d)、%s(%d)和%s(%d)。'%(City_count.index[0],City_count[0],City_count.index[1],City_count[1],City_count.index[2],City_count[2],City_count.index[3],City_count[3],City_count.index[4],City_count[4],City_count.index[5],City_count[5]))

write_file.close()
Signatures = df_friends.Signature
regex1 = re.compile('<span.*?</span>') #匹配表情
regex2 = re.compile('\s{2,}')#匹配兩個以上佔位符。
Signatures = [regex2.sub(' ',regex1.sub('',signature,re.S)) for signature in Signatures] #用一個空格替換表情和多個空格。
Signatures = [signature for signature in Signatures if len(signature)>0] #去除空字符串
text = '\n'.join(Signatures)
file_name = NickName+'_wechat_signatures.txt'
with open(file_name,'w',encoding='utf-8') as f:
    f.write(text)
    f.close()
wordlist = jieba.cut(text, cut_all=True)

word_space_split = ' '.join(wordlist)

coloring = np.array(Image.open("F:\duolaameng.jpg")) #詞雲的背景和顏色。這張圖片在本地。

my_wordcloud = WordCloud(background_color="white", max_words=500,
                         mask=coloring, max_font_size=100, random_state=42, scale=2,
                         font_path="C:\Windows\Fonts\STZHONGS.TTF").generate(word_space_split) #生成詞雲。font_path="C:\Windows\Fonts\msyhl.ttc"指定字體,有些字不能解析中文,這種情況下會出現亂碼。

file_name_p = NickName+'.jpg'
my_wordcloud.to_file(file_name_p) #保存圖片






 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章