摘要:原文鏈接一個開源的微信個人接口,今天我們就用爬取微信好友信息,無圖言虛空三張圖分別是微信好友頭像拼接圖性別統計圖個性簽名統計圖微信好友頭像拼接圖性別統計圖個性簽名統計圖安裝主要用到的方法微信掃描二維碼登錄返回完整的好友列表,每個好友為一個字
原文鏈接:https://mp.weixin.qq.com/s/4EXgR4GkriTnAzVxluJxmg
「itchat」一個開源的微信個人接口,今天我們就用itchat爬取微信好友信息,無圖言虛空
三張圖分別是「微信好友頭像拼接圖」、「性別統計圖」、「個性簽名統計圖」
「微信好友頭像拼接圖」
「性別統計圖」
「個性簽名統計圖」
pip3 install itchat
主要用到的方法:
itchat.login() 微信掃描二維碼登錄
itchat.get_friends() 返回完整的好友列表,每個好友為一個字典, 其中第一項為本人的賬號信息,傳入update=True, 將更新好友列表并返回, get_friends(update=True)
itchat.get_head_img(userName="") 根據userName獲取好友頭像
獲取好友信息,get_head_img拿到每個好友的頭像,保存文件,將頭像縮小拼接至一張大圖。
先獲取好友頭像:
def headImg(): itchat.login() friends = itchat.get_friends(update=True) # itchat.get_head_img() 獲取到頭像二進制,并寫入文件,保存每張頭像 for count, f in enumerate(friends): # 根據userName獲取頭像 img = itchat.get_head_img(userName=f["UserName"]) imgFile = open("img/" + str(count) + ".jpg", "wb") imgFile.write(img) imgFile.close()
這里需要提前在同目錄下新建了文件夾img,否則會報No such file or directory錯誤,img用于保存頭像圖片,遍歷好友列表,根據下標count命名頭像,到這里可以看到文件夾里已經保存了所有好友的頭像。
接下來就是對頭像進行拼接
遍歷文件夾的圖片,random.shuffle(imgs)將圖片順序打亂
用640*640的大圖來平均分每一張頭像,計算出每張正方形小圖的長寬,壓縮頭像,拼接圖片,一行排滿,換行拼接,好友頭像多的話,可以適當增加大圖的面積,具體代碼如下:
def createImg(): x = 0 y = 0 imgs = os.listdir("img") random.shuffle(imgs) # 創建640*640的圖片用于填充各小圖片 newImg = Image.new("RGBA", (640, 640)) # 以640*640來拼接圖片,math.sqrt()開平方根計算每張小圖片的寬高, width = int(math.sqrt(640 * 640 / len(imgs))) # 每行圖片數 numLine = int(640 / width) for i in imgs: img = Image.open("img/" + i) # 縮小圖片 img = img.resize((width, width), Image.ANTIALIAS) # 拼接圖片,一行排滿,換行拼接 newImg.paste(img, (x * width, y * width)) x += 1 if x >= numLine: x = 0 y += 1 newImg.save("all.png")
好友頭像圖成型,頭像是隨機打亂拼接的
性別統計圖同樣itchat.login()登錄獲取好友信息,根據Sex字段判斷性別,1 代表男性(man),2 代表女性(women),3 未知(unknown)
def getSex(): itchat.login() friends = itchat.get_friends(update=True) sex = dict() for f in friends: if f["Sex"] == 1: #男 sex["man"] = sex.get("man", 0) + 1 elif f["Sex"] == 2: #女 sex["women"] = sex.get("women", 0) + 1 else: #未知 sex["unknown"] = sex.get("unknown", 0) + 1 # 柱狀圖展示 for i, key in enumerate(sex): plt.bar(key, sex[key]) plt.show()
性別統計柱狀圖
獲取好友信息,Signature字段是好友的簽名,將個性簽名保存到.txt文件,部分簽名里有表情之類的會變成emoji 類的詞,將這些還有特殊符號的替換掉。
def getSignature(): itchat.login() friends = itchat.get_friends(update=True) file = open("sign.txt", "a", encoding="utf-8") for f in friends: signature = f["Signature"].strip().replace("emoji", "").replace("span", "").replace("class", "") # 正則匹配 rec = re.compile("1fd+w*|[<>/=]") signature = rec.sub("", signature) file.write(signature + " ")
sign.txt文件里寫入了所有好友的個性簽名,使用wordcloud包生成詞云圖,pip install wordcloud
同樣可以采用jieba分詞生成詞圖,不使用分詞的話就是句子展示,使用jieba分詞的話可以適當把max_font_size屬性調大,比如100。
需要注意的是運行不要在虛擬環境下,deactivate 退出虛擬環境再跑,詳細代碼如下:
# 生成詞云圖 def create_word_cloud(filename): # 讀取文件內容 text = open("{}.txt".format(filename), encoding="utf-8").read() # 注釋部分采用結巴分詞 # wordlist = jieba.cut(text, cut_all=True) # wl = " ".join(wordlist) # 設置詞云 wc = WordCloud( # 設置背景顏色 background_color="white", # 設置最大顯示的詞云數 max_words=2000, # 這種字體都在電腦字體中,window在C:WindowsFonts下,mac下可選/System/Library/Fonts/PingFang.ttc 字體 font_path="C:WindowsFontssimfang.ttf", height=500, width=500, # 設置字體最大值 max_font_size=60, # 設置有多少種隨機生成狀態,即有多少種配色方案 random_state=30, ) myword = wc.generate(text) # 生成詞云 如果用結巴分詞的話,使用wl 取代 text, 生成詞云圖 # 展示詞云圖 plt.imshow(myword) plt.axis("off") plt.show() wc.to_file("signature.png") # 把詞云保存下
句子圖
使用jieba分詞產生的詞云圖
看來,「努力」 「生活」 還是很重要的
itchat 除了以上的信息,還有省市區等等信息都可以抓取,另外還可以實現機器人自動聊天等功能,這里就不一一概述了。
最后附上github地址:https://github.com/taixiang/itchat_wechat
歡迎關注我的博客:https://blog.manjiexiang.cn/
歡迎關注微信號:春風十里不如認識你
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41815.html
摘要:今天要介紹的是小程序的自定義組件,類似的在做開發的過程中會用到自定義,封裝成通用的組件可以在不同頁面里重復使用可以將復雜的頁面拆分成多個低耦合的模塊,便于代碼的維護。 文章鏈接:https://mp.weixin.qq.com/s/3xPnDwLsg7pHc_xAmS1DUQ 在前一篇文章 小程序使用之WXS中,介紹了關于 wxs 的使用,通過wxs處理數據再渲染到view層,可以簡...
摘要:今天要介紹的是小程序的自定義組件,類似的在做開發的過程中會用到自定義,封裝成通用的組件可以在不同頁面里重復使用可以將復雜的頁面拆分成多個低耦合的模塊,便于代碼的維護。 文章鏈接:https://mp.weixin.qq.com/s/3xPnDwLsg7pHc_xAmS1DUQ 在前一篇文章 小程序使用之WXS中,介紹了關于 wxs 的使用,通過wxs處理數據再渲染到view層,可以簡...
摘要:處理文件最終得到的字符串得到所有的文本之后,使用結巴分詞,處理成單個的詞語。 文章鏈接:https://mp.weixin.qq.com/s/NmJjTEADV6zKdT--2DXq9Q 回看18年,最有成就的就是有了自己的 博客網站,堅持記錄,寫文章,累計寫了36篇了,從一開始的難以下手,到現在成為一種習慣,雖然每次寫都會一字一句斟酌,但是每次看到產出,內心還是開心的,享受這樣的過...
摘要:也瀏覽過家具城的官網,本著在一定的預算范圍之類挑選最合適的,作為一個程序猿,一顆不安分的心,決定自己爬蟲下網站,列出個表格,也方便給父母輩們查看,順帶再練習下爬蟲的。根據行列坐標將數據寫入單元格。設置列寬,指定開始列位置,指定結束列位置。 原文鏈接:https://mp.weixin.qq.com/s/tQ... 家中想置辦些家具,聽朋友介紹說蘇州蠡(li第二聲)口的家具比較出名,因...
摘要:本文為教程的第二部分,主要以微信控制器群發助手好友刪除檢測為例演示如何調用微信。教程流程簡介這一系列教程從如何分析微信協議開始,第一部分教你如何從零開始獲取并模擬擴展個人微信號所需要的協議。 現在的日常生活已經離不開微信,本文將會拋磚引玉演示如何使用Python調用微信API做一些有意思的東西。 看完這一系列教程,你就能從頭開始實現自己關于微信的想法。 本文為教程的第二部分,主要以微信...
閱讀 1027·2021-09-26 09:55
閱讀 3573·2021-09-24 10:30
閱讀 1374·2021-09-08 09:36
閱讀 2558·2021-09-07 09:58
閱讀 609·2019-08-30 15:56
閱讀 774·2019-08-29 18:32
閱讀 3622·2019-08-29 15:13
閱讀 1847·2019-08-29 13:49