爬朋友圈好友的個性簽名,生成雲圖(上)

看了大神的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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章