0. itchat

最近研究了一些微信的玩法,我们可以通过网页版的微信微信网页版,扫码登录后去抓包爬取信息,还可以post去发送信息。

然后发现了itchat这个开源项目,作者是@LittleCoder,已经把微信的接口完成了,大大的方便了我们对微信的挖掘,以下的功能也通过itchat来实现。

安装itchat这个库

pip install itchat

先来段简单的试用,实现微信的登录,运行下面代码会生成一个二维码,扫码之后手机端确认登录,就会发送一条信息给‘filehelper’,这个filehelper就是微信上的文件传输助手。

import itchat# 登录itchat.login()# 发送消息itchat.send(u'你好', 'filehelper')

除了登录和发送消息我们还可以这么来玩,往下走~

1. 微信好友男女比例

想统计下自己微信里好友的性别比例,当然也是很简单,先获取好友列表,统计列表里性别计数

import itchat# 先登录itchat.login()# 获取好友列表friends = itchat.get_friends(update=True)[0:]# 初始化计数器,有男有女,当然,有些人是不填的male = female = other = 0# 遍历这个列表,列表里第一位是自己,所以从"自己"之后开始计算# 1表示男性,2女性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:])# 好了,打印结果print u"男性好友:%.2f%%" % (float(male) / total * 100)print u"女性好友:%.2f%%" % (float(female) / total * 100)print u"其他:%.2f%%" % (float(other) / total * 100)

好看看结果:

(好吧,暴露了我男性友人较多的真相~~)

好像不够直观,有兴趣的朋友可以加上可视化的展示,我这里用基于python的Echarts(有机会再细讲) 
先安装了

pip install echarts-python

展示比例一般使用百分比圆饼表吧

# 使用echarts,加上这段from echarts import Echart, Legend, Piechart = Echart(u'%s的微信好友性别比例' % (friends[0]['NickName']), 'from WeChat')chart.use(Pie('WeChat', [{'value': male, 'name': u'男性 %.2f%%' % (float(male) / total * 100)}, {'value': female, 'name': u'女性 %.2f%%' % (float(female) / total * 100)}, {'value': other, 'name': u'其他 %.2f%%' % (float(other) / total * 100)}], radius=["50%", "70%"]))chart.use(Legend(["male", "female", "other"]))del chart.json["xAxis"]del chart.json["yAxis"]chart.plot()

登登登登~

2. 好友个性签名词云

获取好友列表的时候,返回的json信息中还看到了有个性签名的信息,脑洞一开,把大家的个性签名都抓下来,看看高频词语,还做了个词云。

# coding:utf-8import itchat# 先登录itchat.login()# 获取好友列表friends = itchat.get_friends(update=True)[0:]for i in friends: # 获取个性签名 signature = i["Signature"]print signature

先全部抓取下来 
打印之后你会发现,有大量的span,class,emoji,emoji1f3c3等的字段,因为个性签名中使用了表情符号,这些字段都是要过滤掉的,写个正则和replace方法过滤掉

for i in friends:# 获取个性签名 signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")# 正则匹配过滤掉emoji表情,例如emoji1f3c3等 rep = re.compile("1f\d.+") signature = rep.sub("", signature) print signature

接来下用jieba分词,然后制作成词云,首先要安装jieba和wordcloud库

pip install jieba
pip install wordcloud

代码

# coding:utf-8import itchatimport reitchat.login()friends = itchat.get_friends(update=True)[0:]tList = []for i in friends: signature = i["Signature"].replace(" ", "").replace("span", "").replace("class", "").replace("emoji", "") rep = re.compile("1f\d.+") signature = rep.sub("", signature) tList.append(signature)# 拼接字符串text = "".join(tList)# jieba分词import jiebawordlist_jieba = jieba.cut(text, cut_all=True)wl_space_split = " ".join(wordlist_jieba)# wordcloud词云import matplotlib.pyplot as pltfrom wordcloud import WordCloudimport PIL.Image as Image# 这里要选择字体存放路径,这里是Mac的,win的字体在windows/Fonts中my_wordcloud = WordCloud(background_color="white", max_words=2000, max_font_size=40, random_state=42, font_path='/Users/sebastian/Library/Fonts/Arial Unicode.ttf').generate(wl_space_split)plt.imshow(my_wordcloud)plt.axis("off")plt.show()

运行代码

这。。好像有点丑,根据wordcloud用法,我可以找一张图来生成配色方案,我这里找了一张微信的logo

修改一下代码

# wordcloud词云import matplotlib.pyplot as pltfrom wordcloud import WordCloud, ImageColorGeneratorimport osimport numpy as npimport PIL.Image as Imaged = os.path.dirname(__file__)alice_coloring = np.array(Image.open(os.path.join(d, "wechat.jpg")))my_wordcloud = WordCloud(background_color="white", max_words=2000, mask=alice_coloring, max_font_size=40, random_state=42, font_path='/Users/sebastian/Library/Fonts/Arial Unicode.ttf')\ .generate(wl_space_split)image_colors = ImageColorGenerator(alice_coloring)plt.imshow(my_wordcloud.recolor(color_func=image_colors))plt.imshow(my_wordcloud)plt.axis("off")plt.show()# 保存图片 并发送到手机my_wordcloud.to_file(os.path.join(d, "wechat_cloud.png"))itchat.send_image("wechat_cloud.png", 'filehelper')


嗯~好像还可以,这是Mac下生成的,附一个win10下生成的
3. 微信自动回复

接着来实现一个类似qq上的自动回复,原理就是接收到消息,就发消息回去,同时发一条给文件助手,就可以在文件助手中统一查看消息。

代码很简单,来看看

#coding=utf8import itchat# 自动回复# 封装好的装饰器,当接收到的消息是Text,即文字消息@itchat.msg_register('Text')def text_reply(msg): # 当消息不是由自己发出的时候 if not msg['FromUserName'] == myUserName: # 发送一条提示给文件助手 itchat.send_msg(u"[%s]收到好友@%s 的信息:%s\n" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime'])), msg['User']['NickName'], msg['Text']), 'filehelper') # 回复给好友 return u'[自动回复]您好,我现在有事不在,一会再和您联系。\n已经收到您的的信息:%s\n' % (msg['Text'])if __name__ == '__main__': itchat.auto_login() # 获取自己的UserName myUserName = itchat.get_friends(update=True)[0]["UserName"] itchat.run()

运行后会保持登录状态,开启自动回复模式,手机上查看:

当然,除了文字Text信息,还可以接收图片(表情包算图片),语音,名片,地理位置,分享和类型为Note的信息(就是有人提示类的消息,例如撤回消息),把装饰器写成下面形式即可接受,大家可以试试

@itchat.msg_register(['Map', 'Card', 'Note', 'Sharing', 'Picture'])

4. 最后

除了上面这些,还可以做到管理微信群,自动添加好友,还可以加入机器人回复功能,有时间会补上。

原文发布时间为:2017-05-09

本文作者:yonggege

本文来自云栖社区合作伙伴“Python中文社区”,了解相关信息可以关注“Python中文社区”微信公众号

用Python玩转微信的正确姿势!相关推荐

  1. 这才是 玩转Github 的正确姿势

    这才是 玩转Github 的正确姿势 GitHub各位应该都很熟悉了,全球最大的开源社区,也是全球最大的同性交友网站~~,但是大部分同学使用GitHub应该就是通过别人的开源链接,点进去下载对应的项目 ...

  2. 用python玩转微信小游戏 大小猜猜看

    用python玩转微信小游戏 大小猜猜看 游戏模式 在微信小程序里搜索"大小猜猜看",即可找到该游戏. 游戏的目标比拼计算能力,找出谁大谁小,一共有40题,全部答对即挑战成功. 一 ...

  3. python怎么撤销_用Python玩转微信(三)—— 查看撤回消息

    在第一篇中,我爬取微信中的好友资料,并对好友的性别数据进行了可视化,以及统计好友来自哪里. 那么在第二篇当中呢,爬取了好友的个性签名并制作成非常好看的创意词云图. 用这可爱的皮卡丘作为背景,把所有好友 ...

  4. python利用微信的方法_用Python玩转微信

    Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货!  这个是在 itchat上做的封装  http://itchat.readthedocs.io ...

  5. 【59MB】金融求职宝典 玩转金融业的正确姿势 增订版.PDF

    金融求职宝典 玩转金融业的正确姿势 增订版 [作 者]金融小伙伴著 [形态项] 373 [出版项] 北京:中国市场出版社 , 2017.07 [ISBN号]978-7-5092-1563-0 [中图法 ...

  6. android 解锁mac,论一台笔记本三个不同系统的玩法,解锁正确姿势

    原标题:论一台笔记本三个不同系统的玩法,解锁正确姿势 关于<折腾永无止境>的文章... 所以不打算长篇幅介绍怎么安装.步骤.怎么折腾的教科书,不懂?隔壁度娘给你答案! 目标非常明确:要榨干 ...

  7. 玩转Ceph的正确姿势

    内容目录: Ceph 客户端 Ceph 服务端 总结 参考 玩转 Ceph 的正确姿势 本文先介绍 Ceph, 然后会聊到一些正确使用 Ceph 的姿势:在集群规模小的时候,Ceph 怎么玩都没问题: ...

  8. 10分钟教你用Python玩转微信之抓取好友个性签名制作词云

    10分钟教你用Python玩转微信之抓取好友个性签名制作词云 01 前言+展示 各位小伙伴我又来啦.今天带大家玩点好玩的东西,用Python抓取我们的微信好友个性签名,然后制作词云.怎样,有趣吧~好了 ...

  9. [wxpy]用Python玩转微信之wxpy初探 ── 做属于自己的微信机器人

    用Python玩转微信之wxpy初探 wxpy介绍 安装wxpy 代码实现 1.登录微信 2.自动处理消息 3.实现程序运行 4.自动回复消息 完整代码 最近事情不多,有时间可以去研究点儿东西,之前看 ...

最新文章

  1. Ubuntu下安装和配置Apache2
  2. GCC中通过--wrap选项使用包装函数
  3. 编写一个程序,打印输入中各个字符出现频度的直方图
  4. 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “插件包“ 中的 Element[] dexElements )
  5. vuejs和webpack项目(VueComponent)初尝试——瀑布流组件
  6. Linux程序内存跟踪,分享一款Linux进程和内存活动监视神器
  7. Redis事务中几种常见的场景-exec执行前后的语法错误时的处理
  8. idea常用但容易忘记的快捷键
  9. 明年起,汉语正式纳入俄罗斯“高考”,光看题目我都要笑出声了!
  10. [archlinux] linux boot process/order/stage
  11. hdu 5402 Travelling Salesman Problem (技巧,未写完)
  12. 一些小程序的练习(一)
  13. html5 ios keychain,ios Keychain KeychainItemWrapper
  14. 淘宝淘口令n年前算法
  15. 百度网盘视频倍速方法
  16. 3.12_ValueError: x and y must have same first dimension, but have shapes (100,) and (1,)
  17. vue3如何去掉控制台的warn信息
  18. Android开发 RFC 2136 DNS动态更新协议
  19. 网络编程的TCP和UDP实现(Python)
  20. adb常用命令以及使用

热门文章

  1. php和python哪个工资高-前端,java,php,python工程师哪个最缺 知乎
  2. python中的二进制、八进制、十六进制的相互转换
  3. conda创建虚拟环境 和 用conda创建GPU的cuda、cudnn使用环境
  4. 维护服务器技术员流程,技术员岗位工作的流程表.doc
  5. 服务器的BIOS引导模式设置为什么,Legacy BIOS 引导模式和 UEFI 引导模式
  6. xor java_java基于密匙的xor加解密
  7. JUnit4测试框架设计与实现
  8. boost asio 应用方法学(二)——深入框架
  9. vs2013中的error c4996的问题
  10. 机器学习——Java调用sklearn生成好的Logistic模型进行鸢尾花的预测