使用Python訪問微信
itchat是一個開源的微信個人號接口,使用它我們可以很方便的訪問我們個人微信號裏的信息。itchat的github地址如下:
https://github.com/littlecodersh/itchat
在通過 pip install itchat安裝此模塊後,我們即可以通過使用python訪問自己微信號下的信息。
1. 登陸
首先我們需要登陸我們的微信號:
import itchat
itchat.auto_login(hotReload=True)
此處的auto_login()執行後,會下載一張二維碼圖片,然後通過手機掃描二維碼圖片後即可登錄個人微信。在指定hotReload=True後,此方法會生成一個本地的
另外一種登錄方式為:
>>>itchat.login()
2. 訪問微信好友信息
在成功登陸後,我們可以直接獲取所有微信好友的信息:
friends = itchat.get_friends(update=True)
print(friends)
通過觀察打印出的信息,我們可以發現每個好友的信息均存在一個字典裏,這個字典裏的key主要有:
‘UserName‘, ‘City‘, ‘DisplayName‘, ‘Province‘, ‘Signature‘, ‘NickName‘, ‘Sex‘……
接下來,我們可以將一些主要的信息存放在幾個列表裏:
# information
NickName = []
Sex = []
Province = []
City = []
Signature = []
for friend in friends:
NickName.append(friend[‘NickName‘])
Sex.append(friend[‘Sex‘])
Province.append(friend[‘Province‘])
City.append(friend[‘City‘])
Signature.append(friend[‘Signature‘])
dic = {‘NickName‘:NickName, ‘Sex‘:Sex, ‘Province‘:Province, ‘City‘:City, ‘Signature‘:Signature}
然後將它存為DataFrame:
from pandas import DataFrame
data = DataFrame(dic)
如果你更擅長用excel分析的話,可以將它保存為一個excel文檔保存到本地:
data.to_csv(‘data.csv‘, index=True, encoding=‘utf_8_sig‘)
之後可以直接在excel裏查看這些信息,如(隱私被處理):
City |
NickName |
Province |
Sex |
Signature |
|||
0 |
N1 |
X |
|||||
1 |
XXX |
N2 |
XXXX |
X |
XXXXX |
||
2 |
N3 |
X |
|||||
3 |
XXX |
N4 |
XXX |
X |
XXXXX |
||
4 |
N5 |
X |
XXXXX |
…
3. 分析信息
在獲取了這些信息後,我們可以簡單的查看一下,如:
1. 好友裏男女比例:
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif‘]=[‘SimHei‘] #用來正常顯示中文標簽
sexcounts = data[‘Sex‘].value_counts()
sexcounts.plot(kind=‘pie‘, autopct=‘%1.0f%%‘, pctdistance=0.5, labeldistance=1.2).get_figure()
plt.show()
其中0表示性別未填寫,1表示男性,2表示女性
2. 好友裏地域分布(其中地域部分未截圖):
procounts = data[‘Province‘].value_counts()
procounts.plot(kind=‘bar‘).get_figure()
3. 好友簽名裏的常用詞:
首先我們可以將所有簽名合並:
text = ‘‘.join(Signature)
由於會有好友在簽名裏使用表情,所以在文本裏會有如下標簽
<span class="emoji emoji1f4aa"></span><span class="emoji emoji1f4aa">
這裏我們用正則將這些標簽去掉:
import re
reg = re.compile(‘<span .*?>(.*?)</span>‘)
text = reg.sub(‘‘, text)
然後使用jieba這個模塊對得到的文本進行分詞:
import jieba
wordlist = jieba.cut(text, cut_all=True)
words = ‘ ‘.join(wordlist)
最後我們畫出詞雲圖:
coloring = np.array(Image.open(‘w.jpg‘))
my_wordcloud = WordCloud(background_color=‘white‘, max_words=2000, mask=coloring, max_font_size=60, random_state=42, scale=2, font_path=‘/Library/Fonts/Microsoft/SimHei.ttf‘).generate(words)
image_colors = ImageColorGenerator(coloring)
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
看來大家都是很熱愛生活的哇!
使用Python訪問微信