0%

python爬取微信好友可视化信息

微信已成为我们生活中很常用的通信软件了,也正是因为微信的流行与火爆,那些爬虫大佬就禁不住要盘一盘微信了,哈哈😊,作为小白,只能向大神不断学习。本文就简单记录一下使用python来爬取微信好友的一些信息。

itchat

在开始之前呢,首先要先介绍一下itchat。itchat是一个开源的微信个人号接口,它包含了丰富的微信API接口,itchat让使用python调用微信从未如此简单,具体关于itchat文档大家查看itchat文档

本次使用itchat,完成了个人微信登陆、好友按男女比例统计并画出可视化图形、好友分布地区统计、好友标签统计,当然,除了这些基本功能,还有更强大、更好玩的新式玩法等你开发。

安装所需要的库

首先,除了配置python的基本环境外(相信你已经完成),还需要安装好一些使用库,itchat、pyecharts、jieba库,安装方法就是通用的pip install 库名,这里要注意的是,pyecharts最新版1.6与1.0之前的版本有很大的变动,因此,如果要按照本文方法进行操作时,需要指定其版本安装:

1
pip install pyecharts==0.1.9.4

当然你也可以使用最新版本,不过要先阅读下pyecharts的更新文档哦。
准备就绪后就开始进行代码编写吧。

微信登陆,好友信息获取

性别人数统计,可视化图形输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import itchat
import matplotlib.pyplot as plt
import pandas as pd
from pyecharts import Map,Geo
import jieba
import re

itchat.login()
friends = itchat.get_friends()

def get_var(var):
variable = []
for i in friends:
value = i[var]
variable.append(value)
return variable

male = female = other = 0
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:])
a = float(male)/total*100
b = float(female)/total*100
c = float(other)/total*100

x=[a,b,c]
label = ['male','female','other']
plt.pie(x=x, labels= label, autopct='%3.1f%%',shadow=True, labeldistance=1.1, startangle=90,pctdistance=0.6)
plt.show()

效果图如下:

获取好友的所在地区省份信息

使用map方法统计标注地图。

1
2
3
4
5
6
7
8
9
10
11
12
Province = get_var('Province')
data = pd.DataFrame({'prv':Province,'nu':1})
data = data.loc[data['prv']!='',:]
data = data.groupby(['prv']).sum().sort_values(by='nu')
provice = data.index.tolist()
values = data.values.tolist()

map = Map("好友分布",'地区分布',width=1200, height=600)
map.add("",provice,values,visual_range=[0,50],maptype='china',is_visualma=True,
visual_text_color='#000')
map.show_config()
map.render(path="C:/path/pyTest/mapfriends.html")

运行小地图结果,会发现你的朋友遍布全国各地😄。

爬取好友的个性签名

利用jieba方法进行中文分词,并输出csv格式文档。这里要注意的是,在数据保存为CSV时,encoding要设置为utf_8_sig,才能正常在文档中显示,不然会出现乱码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 爬取好友的个性签名
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)
# 中文分词
wordlist = jieba.cut(text, cut_all=True)
word_space_split = ",".join(wordlist).split(',')
# 去掉所有停用词
ph=open("C:/Users/wang/Desktop/pyTest/tyc.txt","rb")
tyc=str(ph.read().decode('utf-8'))
ph.close()
m=[]
for i in word_space_split:
if i not in tyc:
m.append(i)
# 统计词频并保存为csv文件
da=pd.DataFrame({'ci':m,'nu':1})
da=da.groupby(['ci']).sum().sort_values(by='nu',ascending=False)
da.to_csv('C:/Users/wang/Desktop/pyTest/qianming.csv',encoding="utf_8_sig")

截取的表格数据:

一些小问题

在使用matplotlib库绘制图形时,运行时出现Qt平台不能打开的问题(如图),参考了一些大佬的建议,可能是环境变量的问题,可参照这篇博文进行更改。

-------------    本文结束  感谢您的阅读    -------------