Python3 爬取微信好友基本信息,并进行数据清洗详解编程语言

Python3 爬取微信好友基本信息,并进行数据清洗

1,登录获取好友基础信息:

  好友的获取方法为get_friends,将会返回完整的好友列表。

  • 其中每个好友为一个字典
  • 列表的第一项为本人的账号信息
  • 传入update键为True将可以更新好友列表并返回
''' 
微信: 
Date:20180918 
Author:lizm 
Description:爬取微信好友、公众号、群聊基本信息,并进行数据清洗 
''' 
import itchat 
from pandas import DataFrame 
import pandas as pd 
import re 
 
#1,登录(每次登录都要扫二维码) 
itchat.login() 
#登录(只需要扫码一次,第二次运行手机微信会弹出确认框) 
#itchat.auto_login(hotReload=True) 
 
#爬取自己好友相关信息, 返回一个json文件 
friends = itchat.get_friends(update=True)[0:] 
#print(friends)

2,统计性别并图形展示(pyecharts)

#2,统计性别 
#初始化计数器 
male = female = other = 0 
#friends[0]是自己的信息,所以要从friends[1]开始 
for i in friends[1:]: 
    sex = i["Sex"] 
    if sex == 1: 
        male += 1 
    elif sex == 2: 
        female += 1 
    else: 
        other +=1 
#计算朋友总数 
total = len(friends[1:]) 
#打印出自己的好友性别比例 
print("男性好友: %.2f%%" % (float(male)/total*100) + "/n" + 
"女性好友: %.2f%%" % (float(female) / total * 100) + "/n" + 
"不明性别好友: %.2f%%" % (float(other) / total * 100)) 
 
#pyecharts图形 
from pyecharts import Bar 
bar =Bar("性别比例图", "微信好友") 
bar.add("性别", ["", "", "未知"], [male, female, other]) 
bar.show_config() 
bar.render()

3,将基本信息保存到csv

#3,将基本信息保存到csv 
def filter_emoji(desstr,restr=''):   
    #过滤表情    
    try:   
        co = re.compile(u'[/U00010000-/U0010ffff]')   
    except re.error:   
        co = re.compile(u'[/uD800-/uDBFF][/uDC00-/uDFFF]')   
    return co.sub(restr, desstr)   
 
#定义一个函数,用来爬取各个变量 
import emoji 
def get_var(var): 
    variable = [] 
    for friend in friends: 
        value = friend[var] 
        if isinstance(value,str): 
            value = value.strip() 
            #value = emoji.demojize(value) 
            value = filter_emoji(value,'') 
            rep = re.compile("1f/d+/w*|[<>/=]") 
            value = rep.sub("", value) 
            rep1 = re.compile("[/s+/./!//_,$%^*(+/"/']+|[+——!,。?、~@#¥%……&*()]+") 
            value = rep1.sub('',value) 
            print("爬取数据[%s]>>>>:%s" %(var,value)) 
        else: 
            pass 
        variable.append(value) 
    return variable 
 
#调用函数得到各变量,并把数据存到csv文件中,保存到桌面 
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) 
#windows下运行,需要转码,系统默认是gbk,需要手动设置;注意:utf-8还是乱码,得设置为utf-8-sig 
frame.to_csv('data.csv', index=True,encoding='utf_8_sig')

4,利用签名绘制词云

#4,绘制词云 
#4.1 替换签名中的emoji、span、class、类似<>/= 之类的符号等等 
siglist = [] 
for i in friends: 
    signature = i["Signature"].strip().replace("span","").replace("class","").replace("emoji","") 
    rep = re.compile("1f/d+/w*|[<>/=]") 
    signature = rep.sub("", signature) 
    siglist.append(signature) 
text = "".join(siglist) 
 
#4.2 把结巴分词这个包搞进来分词 
import jieba 
wordlist = jieba.cut(text, cut_all=True) 
word_space_split = " ".join(wordlist) 
 
#4.3 进入画图阶段,根据自己想要的图片、形状、颜色画出相似的图形 
import matplotlib.pyplot as plt 
from wordcloud import WordCloud, ImageColorGenerator 
import numpy as np 
import PIL.Image as Image 
coloring = np.array(Image.open("101.jpg")) 
my_wordcloud = WordCloud(background_color="white", max_words=2000, 
                         mask=coloring, max_font_size=60, random_state=42, scale=2, 
                         font_path="STXINWEI.TTF").generate(word_space_split) 
 
image_colors = ImageColorGenerator(coloring) 
plt.imshow(my_wordcloud.recolor(color_func=image_colors)) 
plt.imshow(my_wordcloud) 
plt.axis("off") 
plt.show()

5,ggplot图形展示

#5, ggplot图形展示 
import matplotlib.pyplot as plt 
#获取csv内容 
df = pd.read_csv('data.csv') 
#配置图 
fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
ax.hist(df['Sex'], bins=7) 
#标题 
plt.title('Sex distribution') 
#X轴标题 
plt.xlabel('Sex')   
#Y轴标题 
plt.ylabel('people') 
plt.show()

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16697.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论