思路
- 爬微信好友的资料
- 将资料中的个性签名去除干扰信息,连接所有信息。
- 将信息进行分词,以空格连接得到合适的字符串
- 将字符串以云图形式展示出来。
步骤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&username=@25427d4c0b1d4ef80a0d187c4cb3de959fbb1ab8a07da854facd4926c86edb45&skey=@crypt_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)