Python 的itchat 的微信文件传输助手和朋友性别,签名,所在城市分析

itchat 是python的微信类,可以用pip install itchat 安装,也可以用conda insatll itchat安装

开发环境为Windows10+Anaconda3(python3.6)

  1. 微信网页登陆
import itchat
itchat.login()

用手机微信二维码扫描即可以登陆网页版的微信

2. 微信文件传输助手的运用

import itchat
itchat.login()
itchat.send('Hello,filehelper',toUserName='filehelper')

向文件传输助手发送Hello,filehelper

3.微信好友性别分析

import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import itchat
itchat.login()
#爬取自己好友的信息,返回一个json文件
friends = itchat.get_friends(update=True)[0:]

#初始化计数器
Male = Female = Unknow = 0
#friends[0]是自己的信息,所以要从friends[1]开始
for i in friends[1:]:
    sex = i["Sex"]
    if sex == 1:
        Male += 1
    elif sex == 2:
        Female += 1
    else
        Unknow += 1
#计算朋友总数
total = str(len(friends[1:]))
#print (total,Male,Female,Unknow)
count =('There are '+total+' people in the WeChat circle')#fontproperties
labels = ['Unknow','Male','Female']
#colors = ['red','yellowgreen','lightskyblue']
X = [Unknow,Male,Female]
fig = plt.figure()
#画饼图(数据,数据对应的标签,百分数保留两位小数点)
plt.pie(X,labels=labels,autopct='%1.2f%%')
plt.title("WeChat's circle gender ratio")
plt.xlabel(count)

plt.show()
#plt.savefig("PieChart.jpg")

  

方法二:或者直接用Echarts画出可视化饼图

pyecharts 为python的一个Echarts的API,安装方法为pip install pycharts,或者conda install pycharts

from pyecharts import Pie
import itchat
itchat.login()
#爬取自己好友的信息,返回一个json文件
friends = itchat.get_friends(update=True)[0:]

#初始化计数器
Male = Female = Unknow = 0
#friends[0]是自己的信息,所以要从friends[1]开始
for i in friends[1:]:
    sex = i["Sex"]
    if sex == 1:
        Male += 1
    elif sex == 2:
        Female += 1
    else:
        Unknow += 1
attr = ["男性朋友","女性朋友","未知性别"]
v1 = [Male,Female,Unknow]
pie = Pie("性别比例")
pie.add("",attr,v1,is_label_show=True)
pie.render()
#pie.show_config()

4.爬去所有微信好友的头像

import itchat
import os
import PIL.Image as Image
from os import listdir
import math
import sys

itchat.login()  # 这种登录是生成二维码图片在本地目录
friends = itchat.get_friends(update=True)[0:]   # 核心:得到friends列表集,内含很多信息
user = friends[0]["UserName"]
w = open(user+"_friends",'a',encoding='utf-8',errors='ignore')  # 将friends列表存下来,看看内容
for i in friends:
    w.write(str(i))
print("授权微信用户为:"+user)
os.mkdir(user)  # 创建文件夹用于装载所有好友头像
num = 0
for i in friends:
    img = itchat.get_head_img(userName=i["UserName"])
    fileImage = open(user + "/" + str(num) + ".jpg",'wb')
    fileImage.write(img)
    fileImage.close()
    num += 1
pics = listdir(user)    # 得到user目录下的所有文件,即各个好友头像
numPic = len(pics)
print("所有好友头像数:"+ str(numPic))
eachsize = int(math.sqrt(float(640 * 640) / numPic))    # 先圈定每个正方形小头像的边长,如果嫌小可以加大
print("小正方形头像边长:"+ str(eachsize))
numrow = int(640 / eachsize)
print("一行小头像数:"+ str(numrow))
numcol = int(math.ceil(numPic * 1.0 / numrow))   # 向上取整
toImage = Image.new('RGB', (eachsize*numrow, eachsize*numcol))  # 先生成头像集模板
x = 0   # 小头像拼接时的左上角横坐标
y = 0   # 小头像拼接时的左上角纵坐标
for i in pics:
    try:
        #打开图片
        img = Image.open(user + "/" + i)
    except IOError:
        print("Error: 没有找到文件或读取文件失败")
    else:
        #缩小图片
        img = img.resize((eachsize, eachsize), Image.ANTIALIAS)
        #拼接图片
        toImage.paste(img, (x * eachsize, y * eachsize))
        x += 1
        if x == numrow:
            x = 0
            y += 1
toImage.save(user + ".jpg")
itchat.send_image(user + ".jpg", 'filehelper')    # 自动向文件助手里面添加图片,不需要可以关闭

得到的图形如下所示



5.微信好友签名分析

import re
import itchat
itchat.login()  # 这种登录是生成二维码图片在本地目录
friends = itchat.get_friends(update=True)[0:]   # 核心:得到friends列表集,内含很多信息
siglist = []
for i in friends:
    signature = i['Signature'].strip().replace('span','').replace('emoji','')
    rep = re.compile("1f\d+\w%|[<>/=]")
    signature = rep.sub("",signature)
    siglist.append(signature)
    text = "".join(siglist)

import jieba
worldlist = jieba.cut(text,cut_all = True)
word_space_split = " ".join(worldlist)

import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
import numpy as np
import PIL.Image as Image

coloring = np.array(Image.open(r'C:\Users\liuzhuang\数据分析\WeChatFriends\101.jpg'))
my_wordcloud = WordCloud(background_color = 'white',max_words = 300,
                         mask=coloring,max_font_size=100,random_state=80,scale=5,
         font_path="C:\Windows\Fonts\simhei.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()

6.微信好友所在城市分析

自己定义一个dataframe,然后用pandas 读取csv文件,最后用Echarts画图。

import pandas
import itchat
itchat.login()
#爬取自己好友的信息,返回一个json文件
friends = itchat.get_friends(update=True)[0:]
def get_var(var):
    variable = []
    for i in friends:
        value = i[var]
        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')
from pandas import DataFrame
data = {'NickName':NickName,'Sex':Sex,'Province':Province,'City':City,'Signature':Signature}
frame = DataFrame(data)
frame.to_csv('friends of data.csv',index=False,encoding="utf_8")
#用pandas 读取文件
friends_of_data = pandas.read_csv('friends of data.csv')
#print (friends_of_data)

#用 Echarts 画出条形图
from pyecharts import Bar
Provinces = []
for f in friends:
    Province = f.Province
    Provinces.append(Province)
    
a ={}
for i in Provinces:
    a[i] = Provinces.count(i)
b = sorted(a.items(),key = lambda item:item[1])
attrs = []
values = []
j = 0
while j < len(b):
    attr = b[j][0]
    value = b[j][1]
    attrs.append(attr)
    values.append(value)
    j += 1
#开始绘图
bar = Bar("好友所在的城市")
bar.add("城市",attrs,values,is_stack=True,is_datazoon_show=True)
bar.render()

总结

       科技的迅速发展使时代面貌日新月异,生活方式的巨变在一定程度上也为人们提供了巨大的便利。但是随着科技的进步,社会也变得越来越复杂,人与人的距离也越来越远。当出现QQ的时候,人们逐渐选择网络社交,远离近距离社交,可是当QQ有一些功能不能够满足人类需求时,出现了微信。微信是一个神奇的存在,日均活跃用户超过10亿,他是一个国民级别的APP,后来微信出现了微信小程序、微信公众号、微信运动等等。可是不知在什么时候,微信朋友圈也变得越来越复杂,当越来越的人选择”仅展示最近三天的朋友圈“,甚至直接屏蔽别人。逐步幻化的好友关系,让微信从熟人社交逐渐过渡到陌生人社交。

       朋友圈亦成为人们展示自我,认识他人的全新交际途径。指间在屏幕上滑动,晒生活、晒幸福、晒观点、简单随意之间,便提高了自我的”被关注度“,满足了表达的需求和欲望;同时,点赞与评论之间,更感受了自身的价值,增强了内心的成就感。然而,当虚假的包装横行、晒图变成修图,当分享变成炫耀、当交流变成宣泄,当垃圾信息泛滥、谣言生成、伪科学散步,虚拟的”朋友圈“似乎正走向扭曲,而沉迷于虚拟的”朋友圈“,也让我们在网络的洪流中迷失自我,与生活的本质渐行渐远。

       有人选择在朋友圈里记录生活的点点滴滴,有人选择在朋友圈里发各种广告,有人选择在朋友圈里面对某一个观点进行评价等等。归根结底,人们无时无刻不在窥探别人的生活,唯独怕别人过多地了解自己的生活。可是在大数据时代,人的隐私基本上可以忽略。人性中交织着的光明与黑暗,就像一只浑身长满刺的刺猬,离得太远会感觉到寒冷,而靠得太近则害怕被刺猬刺伤。于是微信通讯录的人越来越多,朋友圈也越来越大,可是朋友圈再也无法真正触动你。微信面对10亿用户,无法做到让每一个人满意。与其说是微信让人类变得越来越复杂,不如说是人类让微信变得越来越复杂。希望微信可以拉近人与人之间的距离。

       当下,多少心灵在沉迷。饭桌上,沉默寡言,只顾埋头更新朋友圈;秀丽山川之前,无心观赏,匆匆拍照,上传网络......

       但愿虚拟社交终只是生活的调味品,愿你我得以感受真实美好的生活。

       微信原本是一个好东西,可以让关心和关注你的人知道你的生活动态,大家彼此之间嘘寒问暖,相互慰藉和鼓励,同时也可以学到更多的知识,结识更多的人。可是渐渐的发现不再是这么回事儿了。

       若我们能够用一种正确的态度在微信里交流,彼此沟通,相互鼓励、学习,进步、成长,微信的力量也就彰显出她自身的魅力了。

猜你喜欢

转载自blog.csdn.net/liuzhuang2017/article/details/80512918