爬朋友圈好友的个性签名,生成云图(上)

看了大神的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&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
  • 找到个性签名
  • 去除干扰信息
    1. 末尾空格
    2. emoji或者span或者class(查看时候发现到)
    3. <>/=
  • 拼接所有的词

代码

#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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值