300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 原创|Python wxpy模块的有趣应用 微信机器人 微信好友分析搞定

原创|Python wxpy模块的有趣应用 微信机器人 微信好友分析搞定

时间:2020-04-12 20:11:02

相关推荐

原创|Python wxpy模块的有趣应用 微信机器人 微信好友分析搞定

↑↑↑关注后"星标"简说Python

人人都可以简单入门Python、爬虫、数据分析简说Python推荐来源:简说Python作者:老表

大家好,我是老表,今天这篇文章是两年半前写的,这几天在翻以前写的好文章分享给大家,毕竟两年半前只有不到1000读者,现在有4.5w+,应该还是有蛮多读者没有看过,文末可以获取本文完整源码。

本文目录

一、wxpy基本介绍与安装

1.wxpy基本介绍

2.wxpy安装

二、实践出真知

1.给自己的文件传输助手发消息

2.给指定朋友发送消息

3.群发消息(今早醒来突发奇想,给每人发个早安!)

4.获取自己的微信好友数、活跃微信群数、关注微信公众号数

5.个人聊天机器人搭建(基于自己的)

(1)自己的聊天机器人

(2)聊天效果图

6.个人聊天机器人搭建(基于图灵机器人的)

(1)事前准备

(2) 创建属于自己的聊天机器人

(3)聊天效果图

7.来点有趣的

(1)获取微信好友性别、位置分布数据

(2)利用Matplotlib进行数据可视化

1)性别占比饼图

2)城市分布条形图

3)好友省份分布地图

4)获取好友微信昵称和个性签名,词云分析

5)获取关注微信公众号名称和基本简介,词云分析

三、后言

前言

本文是X先生这几天简单看了一下Python里的wxpy模块后,搭配matplotlib模块撰写的一个wxpy基本使用方法教程,也研究了一些比较好玩的东西,主要利用了wxpy对微信进行一系列的自动化操作,比如利用wxpy登录微信、给微信文件助手发送消息、给单个微信好友发送消息、微信消息群发(谨慎使用[/邪笑])以及微信聊天机器的搭建使用过程,你以为wxpy只能这样?No,最后X先生利用wxpy获取了我的微信好友的数量、性别、城市、省份、昵称及个性签名,和关注的微信公众号昵称、公众号简介信息,搭配matplotlib进行了一系列数据的可视化,中间参杂着X先生的一些东倒西歪的文字分析,从这些,,,我解读出了一个真实的我(文末正解)。

一、wxpy基本介绍与安装

1.wxpy基本介绍

wxpy基于itchat,使用了 Web 微信的通讯协议,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。实现了微信登录、收发消息、搜索好友、数据统计、微信公众号、微信好友、微信群基本信息获取等功能。

可用来实现各种微信个人号的自动化操作。

2.wxpy安装方法

方法一:直接安装

pipinstallwxpy

方法二:豆瓣源安装(推荐)

pipinstall-i/simple/wxpy

二、实践出真知

1.给自己的文件传输助手发消息

fromwxpyimport*#初始化一个机器人对象bot=Bot(cache_path=True)#向文件传输助手发送消息bot.file_helper.send("hello,I'mXksA!")

Bot类基本参数介绍:

cache_path–设置当前会话的缓存路径,并开启缓存功能;为None(默认)则不开启缓存功能。开启缓存后可在短时间内避免重复扫码,缓存失效时会重新要求登陆。设为True时,使用默认的缓存路径‘wxpy.pkl’。qr_path–保存二维码的路径console_qr–在终端中显示登陆二维码

运行后弹出一个二维码图片,用微信扫码登录即可,再回来看手机消息。

微信文件传输助手
特别提醒:使用的微信账号不能为新注册的账号,不然会报错KeyError: 'pass_ticket'

2.给指定朋友发送消息

#初始化一个机器人对象#cache_path缓存路径,给定值为第一次登录生成的缓存文件路径bot=Bot(cache_path="H:\PyCoding\Wxpy_test\wxpy.pkl")#查找朋友"极简XksA"my_friend=bot.friends().search('极简XksA')[0]#发送消息my_friend.send('hello极简XksA!')'''除此之外还有可以发送一下内容,自己动手尝试吧发送图片my_friend.send_image('hello.png')发送视频my_friend.send_video('hello.mp4')发送文件my_friend.send_file('hello.rar')'''

运行结果:

单独好友

3.群发消息(今早醒来突发奇想,给每人发个早安!)

importtime#初始化一个机器人对象#cache_path为登录状态缓存路径,给定值为第一次登录生成的缓存文件路径bot=Bot(cache_path="H:\PyCoding\Wxpy_test\wxpy.pkl")#群发消息(谨慎使用,哈哈哈)my_friends=bot.friends(update=False)my_friends.pop(0)#去除列表第一个元素(自己)foriinrange(120):friend=my_friends[i]friend.send('Good morning,the early bird catches the worm!(早上好,早起的鸟儿有虫吃!)')time.sleep(2)friend.send('不用回复,生活中一起加油!')

运行效果:

群发消息效果图

4.获取自己的微信好友数、活跃微信群数、关注微信公众号数

#获取所有好友[返回列表包含Chats对象(你的所有好友,包括自己)]t0=bot.friends(update=False)#查看自己好友数(除开自己)print("我的好友数:"+str(len(t0)-1))#获取所有微信群[返回列表包含Groups对象]t1=bot.groups(update=False)#查看微信群数(活跃的)print("我的微信群聊数:"+str(len(t1)))#获取所有关注的微信公众号[返回列表包含Chats对象]t2=bot.mps(update=False)#查看关注的微信公众号数print("我关注的微信公众号数:"+str(len(t2)))

运行结果:

#注:如果直接把t0、t1、t2打印出就是对应得名称(不同类型,自己可以试一下)我的好友数:242我的微信群聊数:6我关注的微信公众号数:125

5.个人聊天机器人搭建(基于自己的)

(1)自己的聊天机器人

#查找聊天对象my_friend=bot.friends().search('极简XksA')[0]my_friend.send('hello极简XksA!')#自动回复#如果想对所有好友实现机器人回复把参数my_friend改成chats=[Friend]@bot.register(my_friend)defmy_friednd_message(msg):print('[接收]'+str(msg))ifmsg.type!='Text':#除文字外其他消息回复内容ret='你给我看了什么![拜托]'elif"你来自哪里"instr(msg):#特定问题回答ret="我来自极简XksA"else:#文字消息自动回答ret='我爱你'print('[发送]'+str(ret))returnret#进入交互式的Python命令行界面,并堵塞当前线程embed()

(2)聊天效果图
基于自己的聊天机器人

6.个人聊天机器人搭建(基于图灵机器人的)

(1)事前准备

点击这里注册图灵机器人账号,然后创建一个机器人,即可获得属于你的图灵机器人api。

图灵机器人api获取

(2) 创建属于自己的聊天机器人

方法一:使用Tuling类,简单实现

#登录缓存路径,第一次设置为True#生成缓存文件wxpy.pkl后,为该文件路径bot=Bot(cache_path="H:\PyCoding\Wxpy_test\wxpy.pkl")tuling=Tuling(api_key='你的图灵接口api')print('极简机器人已经启动')#我的小号,测试需谨慎my_friednd=bot.friends().search('极简XksA')[0]#如果想对所有好友实现机器人回复把参数my_friend改成chats=[Friend]#使用图灵机器人自动与指定好友聊天@bot.register(my_friend)defreply_my_friend(msg):tuling.do_reply(msg)#进入交互式的Python命令行界面,并堵塞当前线程embed()

方法二:自己手动发送post请求,有点麻烦哈哈哈~

defauto_ai(text):url="/openapi/api"api_key="你的图灵接口api"payload={"key":api_key,"info":text,"userid":"老表"}r=requests.post(url,data=json.dumps(payload))result=json.loads(r.content)return"[极简机器人]"+result["text"]bot=Bot(cache_path="H:\PyCoding\Wxpy_test\wxpy.pkl")print('极简机器人已经启动')#我的小号,测试需谨慎my_friednd=bot.friends().search('极简XksA')[0]#如果想对所有好友实现机器人回复把参数my_friend改成chats=[Friend]@bot.register(my_friednd)defmy_friednd_message(msg):print('[接收]'+str(msg))ifmsg.type!='Text':ret='你给我看了什么![拜托]'else:ret=auto_ai(msg.text)print('[发送]'+str(ret))returnret#进入交互式的Python命令行界面,并堵塞当前线程embed()

(3)聊天效果图

基本测试,图灵机器人可以实现查询天气、车票、翻译、基本聊天等功能,比我们自己写的,强,,,哈哈哈。

个人聊天效果图

7.来点有趣的

(1)获取微信好友性别、位置分布数据

'''author:极简XksAdata:.8.26goal:获取微信好友性别、分布、微信昵称,可视化分析'''fromwxpyimport*#初始化一个机器人对象#cache_path缓存路径,给定值为第一次登录生成的缓存文件路径bot=Bot(cache_path="H:\PyCoding\Wxpy_test\wxpy.pkl")#获取好友列表(包括自己)my_friends=bot.friends(update=False)'''stats_text 函数:帮助我们简单统计微信好友基本信息简单的统计结果的文本:paramtotal:总体数量:paramsex:性别分布:paramtop_provinces:省份分布:paramtop_cities:城市分布:return:统计结果文本'''print(my_friends.stats_text())

运行结果:

老表共有245位微信好友男性:140(57.1%)女性:79(32.2%)TOP10省份湖北:88(35.92%)广东:16(6.53%)北京:12(4.90%)湖南:5(2.04%)上海:5(2.04%)浙江:4(1.63%)河南:4(1.63%)安徽:3(1.22%)山东:3(1.22%)福建:3(1.22%)TOP10城市荆州:25(10.20%)武汉:22(8.98%)黄石:21(8.57%)海淀:5(2.04%)广州:5(2.04%)深圳:4(1.63%)黄冈:4(1.63%)杭州:3(1.22%)长沙:3(1.22%)昌平:3(1.22%)

(2)利用Matplotlib进行数据可视化
1)性别占比饼图

frompylabimport*mpl.rcParams['font.sans-serif']=['SimHei']#上面两行代码解决matplotlib绘图不能显示中文问题importmatplotlib.pyplotaspltlabels=['男性','女性','其他']sizes=[57.1,32.2,10.7]explode=(0,0.1,0)fig1,ax1=plt.subplots()ax1.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)#纵横相等,画成一个圆ax1.axis('equal')plt.legend()plt.show()

效果图:

性别占比饼图

我的天啊(自绘),我的微信好友居然是男性居多,嘿嘿,也正常,笔者从不沾花惹草,当然女生也不是特别少嘿,包含了家人朋友还有一些社会人嘿。

2)城市分布条形图

importnumpyasnpimportmatplotlib.pyplotaspltn_groups=10#城市分布数量权值city_weight=(10.2,8.98,8.57,2.04,2.04,1.63,1.63,1.22,1.22,1.22)fig,ax=plt.subplots()index=np.arange(n_groups)bar_width=0.35opacity=0.4error_config={'ecolor':'0.3'}rects1=ax.bar(index,city_weight,bar_width,alpha=opacity,color='b',error_kw=error_config,label='城市')ax.set_xlabel('城市名称')ax.set_ylabel('数据占比(%)')ax.set_title('好友城市Top10')ax.set_xticks(index+bar_width/2)ax.set_xticklabels(('荆州','武汉','黄石','海淀','广州','深圳','黄冈','杭州','长沙','昌平'))ax.legend()fig.tight_layout()plt.show()

效果图:

城市发布图

从图中容易看出X先生好友多在荆州,那猜猜X先生是哪里的人?没错,就是荆州人嘿,你的好友里是不是也是家乡人最多呢?(突然的想家!)

3)好友省份分布图

frompyechartsimportMap#matplotlib的方法比较麻烦,显示起来还没pyecharts好,就用了pyechartsvalue=[359.2,65.3,49.0,20.4,20.4,16.3,16.3,12.2,12.2,12.2]attr=["湖北","广东","北京","湖南","上海","浙江","河南","安徽","山东","福建"]map=Map("好友分布省份Top10",width=600,height=400)map.add("",attr,value,maptype="china",is_visualmap=True,visual_text_color="#000",)map.render()

效果图:

好友省份分布图

是不是很直接明了,我的好友基本在我国中南部,你知道你的好友分布吗?我在长江中下游,这里有水有山,有花有草,有乐园。

4)获取好友微信昵称和个性签名,词云分析

bot=Bot(cache_path="H:\PyCoding\Wxpy_test\wxpy.pkl")#获取好友列表(包括自己)my_friends=bot.friends(update=False)#微信昵称nick_name=''#微信个性签名wx_signature=''forfriendinmy_friends:#微信昵称:NickNamenick_name=nick_name+friend.raw['NickName']#个性签名:Signaturewx_signature=wx_signature+friend.raw['Signature']nick_name=jiebaclearText(nick_name)wx_signature=jiebaclearText(wx_signature)make_wordcloud(nick_name,1)make_wordcloud(wx_signature,2)

效果图:

微信好友昵称

我的微信好友昵称,有点复杂,搞淘宝的,浩浩,石头,还有创业,当然最醒目的是老师,都说老师是园丁,谢谢您养育了我们(突发其感)。

微信好友个性签名

我发现他们可以练成一段话:我们所有的人生,就是平凡的自己最伟大,遇见一个美好的自己,一生不止生活,加油。。。

5)获取关注微信公众号名称和基本简介,词云分析

#获取微信公众号名称wx_public_name=''#公众号简介wx_pn_signature=''#获取微信公众号列表my_wx_pn=bot.mps(update=False)forwx_pninmy_wx_pn:wx_public_name=wx_public_name+wx_pn.raw['NickName']wx_pn_signature=wx_pn_signature+wx_pn.raw['Signature']wx_public_name=jiebaclearText(wx_public_name)make_wordcloud(wx_public_name,3)wx_pn_signature=jiebaclearText(wx_pn_signature)make_wordcloud(wx_pn_signature,4)

效果图:

关注微信公众号昵称词云图

看出什么蹊跷没?你问我爱你有多深,你看看Python就知道了哈哈!

公众号简介词云图

基本可以看出我关注的都是积极向上的嘿,真优秀,搞技术的人应该有的公众号(极简XksA[偷笑]),嘿嘿,Java,Python,英语,数据,爬虫…

三、后言

总结

从上面的数据可视化结果,我推测出这样的我:X先生,微信昵称老表,性别男,坐标地址湖北荆州,好友中男性居多,说明事业心重,女性也不少,说明女人缘也不错,微信好友个性签名基本积极向上,有生活,有奋斗,有喜欢,所关注微信公众号大多数技术相关的,专注于Python,也有时候三心二意玩Java,应该是一名大学生,还关注有大学官方公众号。。。哈哈哈(以上纯属X先生自卖自夸,好像还蛮有道理的嘿!)

撰写本文纯是笔者兴趣,嘿嘿,欢迎交流学习!

X先生主要研究Python数据分析及可视化,个人公众号:极简XksA,长期分享学习笔记和学习资源,先在新建了一个学习交流群,想加群交流的麻烦扫描下方二维码(或者搜索:zs820553471),备注:python学习(本来之前是直接给的群二维码,但是有不良推广者趁机而入,所以加群先加我微信,避免对群里的朋友产生不必要的干扰,营造一个好的学习交流环境)。

本文参考文档:

1.wxpy官方介绍文档

2.matplotlib官方介绍文档

本文所有源代码已经上传到码云上:点击阅读原文查看。

--END--

推荐图书

图书介绍给本文点赞("在看"不作要求),扫描下方二维码,添加老表的微信。把点赞截图发给我,我会发送抽奖码给大家,时间截止至06月06号 20:00。抽三位读者朋友,可获得《Python自动化测试实战》赠书一本。

扫码即可加我微信老表朋友圈经常有赠书/红包福利活动

学习更多:整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了

优秀的读者都知道,“点赞”传统美德不能丢

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。