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中的字典与成员运算符初步探究
Oct 13 Python
Python线性方程组求解运算示例
Jan 17 Python
浅谈flask中的before_request与after_request
Jan 20 Python
python爬虫爬取快手视频多线程下载功能
Feb 28 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
Python3批量创建Crowd用户并分配组
May 20 Python
python元组拆包实现方法
Feb 28 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
php 正则匹配函数体
2009/08/25 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
python绘制中国大陆人口热力图
2018/11/07 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
《忆江南》教学反思
2014/04/07 职场文书
七夕情人节促销方案
2014/06/07 职场文书
监理中标通知书
2015/04/16 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python