天天看點

爬朋友圈好友的個性簽名,生成雲圖(上)思路步驟1-爬資料步驟2-去除幹擾資訊

看了大神的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           
  • 找到個性簽名
  • 去除幹擾資訊
    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)