通過python的itchat介面獲取微信好友資訊
阿新 • • 發佈:2019-01-31
itchat是一個開源的微信個人號介面,通過itchat可以實現訊息的傳送接受以及檢視好友的資訊等一些功能。還可以通過呼叫其他的api來實現與其他好友的自動對話,聽起來就很高大上的樣子。
下面是初步涉略itchat之後實現的一小小小部分功能 :
開發環境 :Windows10 + sublime以及正確的python環境和所需要用到的包(其他的包在以前的部落格中有下載)
#下載本次所需要的包
pip install itchat
如果需要檢查itchat是否安裝好,首先按win + r,輸入cmd,在命令框裡輸入python,進入python環境,然後import itchat,出現下圖則說明安裝正確(沒有報錯) :
接下來開始登陸微信,其實登陸微信只需要兩行程式碼即可。在sublime中執行程式碼只需ctrl + b即可,執行後會彈出一張二維碼的照片,用手機微信掃描授權登陸,在手機上的檔案助手會收到訊息 :
import itchat
# hotReload(熱載入),短時間內不需要再次掃碼登陸
itchat.auto_login(hotReload=True)
# 將“Hello FileHelper”傳送給微信的檔案助手
itchat.send(u"Hello FileHelper", "filehelper")
接下來獲取微信好友的基本資訊,以及自己給好友的備註 :
import itchat # hotReload(熱載入),短時間內不需要再次掃碼登陸 itchat.auto_login(hotReload=True) # 將“Hello FileHelper”傳送給微信的檔案助手 # itchat.send(u"Hello FileHelper", "filehelper") # 獲取微信好友的資訊,返回的是字典 friends = itchat.get_friends(update=True)[0:] print(friends)
上述程式碼執行後,出現的部分結果如下圖所示(只截圖了一個人) :
然後可以看到好友的註冊的名字,你給好友的備註,好友性別等等資訊,接下來統計一下你好友的個數,以及好友中男女的分佈,需要注意的是,有部分人在註冊的時候並沒有填寫性別,所以需要加一個其他的變數來儲存 :
import itchat # hotReload(熱載入),短時間內不需要再次掃碼登陸 itchat.auto_login(hotReload=True) # 獲取微信好友的資訊,返回的是json格式的資訊 friends = itchat.get_friends(update=True)[0:] # print(friends) # 初始化性別的變數 male = female = others = 0 # 迴圈得到的全部好友 # 在好友的資訊中有Sex標籤,發現規律是當其值為1是表示男生,2表示女生,0表示沒有填寫的 for i in friends[1:]: sex = i['Sex'] if(sex == 1): male += 1 elif(sex == 2): female += 1 else: others += 1 total = len(friends[2:]) # print(total) print("男生好友比例 : %.2f%%" % (float(male) / total * 100) + "\n" "女生好友比例 : %.2f%%" % (float(female) / total * 100) + "\n" "不明性別好友 : %.2f%%" % (float(others) / total * 100))
上述程式碼統計了男女所佔比例,其實可以根據個人需求去統計好友的地域分佈或者當時取的非主流名字,執行結果如下 :
下面附上爬取好友簽名並製作詞雲的全部程式碼:
import itchat
import re
import jieba
import matplotlib.pyplot as plt
import numpy as np
import PIL.Image as Image
from wordcloud import WordCloud, ImageColorGenerator
# 模擬登陸微信
# 引數hotReload(熱載入)短時間內不需要重複掃描二維碼登入
itchat.auto_login(hotReload=True)
# itchat.send(u'這是一條測試訊息', 'filehelper')
friends = itchat.get_friends(update=True)[0:]
# print(friends)
siglist = []
male = female = others = 0
for i in friends[2:]:
sex = i['Sex']
if(sex == 1):
male += 1
elif(sex == 2):
female += 1
else:
others += 1
# print(i['Signature'])
# 有的好友簽名中帶有其他的表情什麼的,先全部清掉
signature = i['Signature'].strip().replace(
"span", "").replace("class", "").replace("emoji", "")
rep = re.compile("1f\d+\w*|[<>/=]")
signature = rep.sub("", signature)
siglist.append(signature)
# 將處理好的簽名加到text中
text = "".join(siglist)
total = len(friends[2:])
# print(total)
print("男生好友比例 : %.2f%%" % (float(male) / total * 100) + "\n"
"女生好友比例 : %.2f%%" % (float(female) / total * 100) + "\n"
"不明性別好友 : %.2f%%" % (float(others) / total * 100))
# 採用jieba分詞,對生成的text進行分詞
wordlist = jieba.cut(text, cut_all=True)
# 分詞完成後在沒個詞之間加上空格
word_space_split = " ".join(wordlist)
cover = np.array(Image.open("F:\\Python_UP\\WordCloud\\image\\love.jpg"))
my_wordcloud = WordCloud(background_color="white",
max_words=2000,
mask=cover,
max_font_size=60,
random_state=42,
scale=2,
font_path="C:\\Windows\\Fonts\\STXINGKA.TTF").generate(word_space_split)
image_color = ImageColorGenerator(cover)
plt.imshow(my_wordcloud.recolor(color_func=image_color))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
生成詞雲如下圖(好友逗比比較多,見諒。還有,我找不到其他字型了,只好用這個了) :