itchat和matplotlib的结合使用爬取微信信息的实例


Posted in Python onAugust 25, 2017

前几天无意中看到了一片文章,《用 Python 爬了爬自己的微信朋友(实例讲解)》,这篇文章写的是使用python中的itchat爬取微信中朋友的信息,其中信息包括,昵称、性别、地理位置等,然后对这些信息进行统计并且以图像形式显示。文章对itchat的使用写的很详细,但是代码是贴图,画图使用R中的包画,我对着做了一遍,并且把他没有贴画图的代码做了一遍,画图是使用matplotlib。由于他没有贴代码,所以我把我写的贴出来供以后复制。

首先是安装itchat的包,可以使用清华大学的镜像:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple itchat

爬取微信好友男女比例:

import itchat
 
itchat.login()
friends=itchat.get_friends(update=True)[0:]
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:])
malecol=round(float(male)/total*100,2)
femalecol=round(float(female)/total*100,2)
othercol=round(float(other)/total*100,2)
print('男性朋友:%.2f%%' %(malecol)+'\n'+
'女性朋友:%.2f%%' % (femalecol)+'\n'+
'性别不明的好友:%.2f%%' %(othercol))
print("显示图如下:")

 画图:柱状图和饼状图,图片如下:

itchat和matplotlib的结合使用爬取微信信息的实例itchat和matplotlib的结合使用爬取微信信息的实例

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
#解决中文乱码不显示问题
mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 
mpl.rcParams['axes.unicode_minus'] = False #解决保存图像是负号'-'显示为方块的问题 
 
map = {
 'Female': (malecol, '#7199cf'),
 'Male': (femalecol, '#4fc4aa'),
 'other': (othercol, '#e1a7a2')
}
 
fig = plt.figure(figsize=(5,5))# 整体图的标题
ax = fig.add_subplot(111)#添加一个子图
ax.set_title('Gender of friends')
 
xticks = np.arange(3)+0.15# 生成x轴每个元素的位置
bar_width = 0.5# 定义柱状图每个柱的宽度
names = map.keys()#获得x轴的值
values = [x[0] for x in map.values()]# y轴的值
colors = [x[1] for x in map.values()]# 对应颜色
 
bars = ax.bar(xticks, values, width=bar_width, edgecolor='none')# 画柱状图,横轴是x的位置,纵轴是y,定义柱的宽度,同时设置柱的边缘为透明
ax.set_ylabel('Proprotion')# 设置标题
ax.set_xlabel('Gender')
ax.grid()#打开网格
ax.set_xticks(xticks)# x轴每个标签的具体位置
ax.set_xticklabels(names)# 设置每个标签的名字
ax.set_xlim([bar_width/2-0.5, 3-bar_width/2])# 设置x轴的范围
ax.set_ylim([0, 100])# 设置y轴的范围
for bar, color in zip(bars, colors):
 bar.set_color(color)# 给每个bar分配指定的颜色
 height=bar.get_height()#获得高度并且让字居上一点
 plt.text(bar.get_x()+bar.get_width()/4.,height,'%.2f%%' %float(height))#写值
plt.show()
#画饼状图
fig1 = plt.figure(figsize=(5,5))# 整体图的标题
ax = fig1.add_subplot(111)
ax.set_title('Pie chart')
labels = ['{}\n{} %'.format(name, value) for name, value in zip(names, values)]
ax.pie(values, labels=labels, colors=colors)#并指定标签和对应颜色
plt.show()

爬取其他信息,对省份分类并根据个数对其排序

#用来爬去各个变量
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')
 
pros=set(Province)#去重
prosarray=[]
for item in pros:
 prosarray.append((item,Province.count(item)))#获取个数
def by_num(p):
 return p[1]
prosdsored=sorted(prosarray,key=by_num,reverse=True)#根据个数排序

画省份图:

itchat和matplotlib的结合使用爬取微信信息的实例

#画图
figpro = plt.figure(figsize=(10,5))# 整体图的标题
axpro = figpro.add_subplot(111)#添加一个子图
axpro.set_title('Province')
xticks = np.linspace(0.5,20,20)# 生成x轴每个元素的位置
bar_width = 0.8# 定义柱状图每个柱的宽度
pros=[]
values = []
count=0
for item in prosdsored:
 pros.append(item[0])
 values.append(item[1])
 count=count+1
 if count>=20:
  break
 
colors = ['#FFEC8B','#FFE4C4','#FFC125','#FFB6C1','#CDCDB4','#CDC8B1','#CDB79E','#CDAD00','#CD96CD','#CD853F','#C1FFC1','#C0FF3E','#BEBEBE','#CD5C5C','#CD3700','#CD2626','#8B8970','#8B6914','#8B5F65','#8B2252']# 对应颜色
 
bars = axpro.bar(xticks, values, width=bar_width, edgecolor='none')
axpro.set_ylabel('人数')# 设置标题
axpro.set_xlabel('省份')
axpro.grid()#打开网格
axpro.set_xticks(xticks)# x轴每个标签的具体位置
axpro.set_xticklabels(pros)# 设置每个标签的名字
axpro.set_xlim(0,20)# 设置x轴的范围
axpro.set_ylim([0, 100])# 设置y轴的范围
 
for bar, color in zip(bars, colors):
 bar.set_color(color)# 给每个bar分配指定的颜色
 height=bar.get_height()#获得高度并且让字居上一点
 plt.text(bar.get_x()+bar.get_width()/4.,height,'%.d' %float(height))#写值
 
plt.show()

还可以对数据进行保存:可用excel打开

#保存数据
from pandas import DataFrame
data={'NickName':NickName,'Sex':Sex,'Province':Province,'City':City,'Signature':Signature}
frame=DataFrame(data)
 
frame.to_csv('data.csv',index=True)

以上这篇itchat和matplotlib的结合使用爬取微信信息的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现忽略大小写对字符串列表排序的方法
Sep 25 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
解决echarts中饼图标签重叠的问题
May 16 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
详解Python+OpenCV进行基础的图像操作
Feb 15 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 #Python
详解python基础之while循环及if判断
Aug 24 #Python
用Python实现随机森林算法的示例
Aug 24 #Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 #Python
python 接口_从协议到抽象基类详解
Aug 24 #Python
Python调用ctypes使用C函数printf的方法
Aug 23 #Python
使用Python实现博客上进行自动翻页
Aug 23 #Python
You might like
BBS(php & mysql)完整版(五)
2006/10/09 PHP
PHP垃圾回收机制简单说明
2010/07/22 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
js实现简易ATM功能
2020/10/27 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
python 修改本地网络配置的方法
2019/08/14 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Python flask框架端口失效解决方案
2020/06/04 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
欢度春节标语
2014/07/01 职场文书
小学元宵节活动总结
2015/02/06 职场文书
护士节慰问信
2015/02/15 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS