看了大神的http://mp.weixin.qq.com/s?__biz=MzIxNjA2ODUzNg==&mid=2651436390&idx=1&sn=0ec8030efc28b36c2924e7f02a4462f2&chksm=8c73adb1bb0424a713c94875e6e239f878969d74d75221bd6cba0e5d57367c3fb5a9ab702ecd&mpshare=1&scene=23&srcid=0125a348FGMzsnyu9dj6l8bD#rd
我也爬一爬自己好友的資料(認真臉)。
思路
- 爬微信好友的資料
- 将資料中的個性簽名去除幹擾資訊,連接配接所有資訊。
- 将資訊進行分詞,以空格連接配接得到合适的字元串
- 将字元串以雲圖形式展示出來。
步驟1-爬資料
- 建立chat_data.py
- 安裝itchat包
#安裝itchat庫
pip install itchat
或者在pycharm
file->settings->Project:xxx->project interpreter右側的+上搜尋下載下傳itchat庫。
- 使用itchat.login()進行下載下傳登入二維碼圖檔,然後使用者用手機掃二維碼,登入自己的微信。
- 使用itchat.get_friends(update=True)可以得到所有的好友資訊
- 将好友資訊中的個别資訊存儲到csv中,友善後面的操作,這裡我主要提取了姓名、性别、省份、城市和個性簽名。(也可以隻提取個性簽名就行)
#使用pandas這個包存儲資料到csv
pip install pandas
代碼
import itchat
from pandas import DataFrame
itchat.login()
friends = itchat.get_friends(update=True)[0:]
#将所有的資料存入到csv中,用pandas包
#定義一個函數
def get_var(var):
x = []
for i in friends:
value = i[var]
x.append(value)
#按字典的鍵,輸出以清單形式
return x
#調用函數,得到各變量的值
NickName = get_var("NickName")
Sex = get_var("Sex")
Province =get_var("Province")
City =get_var("City")
Signature = get_var("Signature")
data = {'NickName':NickName , 'Sex':Sex,
'Province':Province,'City':City,'Signature':Signature}
#資料框
frame = DataFrame(data)
frame.to_csv('test.csv',index=True) #index表示第一行為鍵
注意:
- 每個好友的資訊如下:
"""
eg:friends[3]:{'MemberList': <ContactList: []>, 'Uin': 0, 'UserName': '@25427d4c0b1d4ef80a0d187c4cb3de959fbb1ab8a07da854facd4926c86edb45',
'NickName': 'lala?', 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=624715047&[email protected]26c86edb45&[email protected]_ad0a82b0_c9a278c3f4976649de45681b57a5968f',
'ContactFlag': 3, 'MemberCount': 0, 'RemarkName': '', 'HideInputBarFlag': 0, 'Sex': 0, 'Signature': '', 'VerifyFlag': 0,
'OwnerUin': 0, 'PYInitial': 'XYXSPANCLASSEMOJIEMOJI1F4AASPAN', 'PYQuanPin':
'xuyanxinspanclassemojiemoji1f4aaspan', 'RemarkPYInitial': '', 'RemarkPYQuanPin': '', 'StarFriend': 0, 'AppAccountFlag': 0, 'Statues': 0,
'AttrStatus': 33558565, 'Province': '','City': '', 'Alias': '', 'SnsFlag': 1, 'UniFriend': 0, 'DisplayName': '',
'ChatRoomId': 0, 'KeyWord': '', 'EncryChatRoomId': '', 'IsOwner': 0}
"""
- 運作前将電腦上已經登入的微信退出,要用運作過程中的登陸二維碼登陸
- 該程式的名字不可以命名為itchat.py會出現錯誤。
步驟2-去除幹擾資訊
- 建立一個新的chat_cloud.py
- 讀取步驟1生成的csv檔案
#一般都有csv,沒有就cmd.exe指令行一下
pip install csv
- 找到個性簽名
- 去除幹擾資訊
- 末尾空格
- emoji或者span或者class(檢視時候發現到)
- <>/=
- 拼接所有的詞
代碼
#1.讀取csv資料
import csv
csv_reader = csv.reader(open('test.csv',encoding='utf-8'))
"""
'序号','City', 'NickName', 'Province', 'Sex', 'Signature'
"""
#2.找到個性簽名
"""
列印出來發現,句首有空格--用str.strip()去除str末尾的空格
有些是emoji或者span或者class等---replace("emoji","")
<>/=等詞--使用正規表達式re包
都要替換掉
拼接所有的詞,得到一個text字元串
"""
import re
str1 = []
for i in csv_reader:
#signature是i[5](0開始),i[0]是序号
signature = i[5].strip() #去除句尾空格
signature = signature.replace("emoji","").replace("span","").replace("class","")
re1 = re.compile("\d+\w*|[<>/=]")
#\d數字,\w比對字母數字及下劃線,*0-多個
#rel.sub()對所有比對到的内容進行替換
signature = re1.sub("",signature)
str1.append(signature)
text = "".join(str1)