最近准备学习微信小程序开发,偶然间看到了python与微信互动的接口itchat,简单学习了下,感觉还挺有意思的,故写了篇基础文章供大家学习。itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。

官网文档:http://itchat.readthedocs.io/zh/latest/

本文主要讲解itchat扩展包的入门基础知识,包括:
1.itchat安装及入门知识
2.微信好友性别分析
3.微信自动回复及发送图片
4.获取微信签名并进行词云分析

基础性文章,希望对您有所帮助,后面将结合舆情分析、朋友圈等接口进行更一步的讲解。如果文章中存在错误或不足之处,还请海涵~

参考文章:
https://zhuanlan.zhihu.com/p/26514576?group_id=839173221667446784
https://www.cnblogs.com/jmmchina/p/6692149.html
http://blog.csdn.net/qinyuanpei/article/details/79360703

一. itchat安装及入门知识

安装通过 pip install itchat 命令实现,如下图所示:

安装成功之后通过 import itchat 进行导入。

下面给出我们第一个简单的代码:

# -*- coding:utf-8 -*-
import itchat# 登录
itchat.login()
# 发送消息
itchat.send(u'你好', 'filehelper')

首先调用itchat.login()函数登录微信,再通过itchat.send(u'你好', 'filehelper')函数发送信息给微信的“文件传输助手(filehelper)”。注意,执行代码过程中会弹出一张二维码图片,我们通过手机扫一扫登录后才能获取我们微信及好友的信息。

  

输出结果如下图所示,可以看到给自己发送了一个“你好”。

下面给出另一段代码:

#-*- coding:utf-8 -*-
import itchat# 先登录
itchat.login()# 获取好友列表
friends = itchat.get_friends(update=True)[0:]
print u"昵称", u"性别", u"省份", u"城市"
for i in friends[0:]:print i["NickName"], i["Sex"], i["Province"], i["City"]

这里最重要的代码是获取好友列表,代码如下:
    friends = itchat.get_friends(update=True)[0:] 

再通过["NickName"]获取昵称、["Sex"]获取性别、["Province"]获取省份、["City"]获取城市。返回的结果如下所示,其中第一个friends[0]是作者本人,然后性别0表示未填写、1表示男性、2表示女性;省份和城市可以不设置。

二. 微信好友性别分析

下面直接给出对微信好友性别分析绘图的代码:

#-*- coding:utf-8 -*-
import itchat#获取好友列表
itchat.login() #登录
friends = itchat.get_friends(update=True)[0:]#初始化计数器
male = 0
female = 0
other = 0#1男性,2女性,3未设定性别
for i in friends[1:]: #列表里第一位是自己,所以从"自己"之后开始计算sex = i["Sex"]if sex == 1:male += 1elif sex == 2:female += 1else:other += 1
#计算比例
total = len(friends[1:])
print u"男性人数:", male
print u"女性人数:", female
print u"总人数:", total
a = (float(male) / total * 100)
b = (float(female) / total * 100)
c = (float(other) / total * 100)
print u"男性朋友:%.2f%%" % a
print u"女性朋友:%.2f%%" % b
print u"其他朋友:%.2f%%" % c#绘制图形
import matplotlib.pyplot as plt
labels = ['Male','Female','Unkown']
colors = ['red','yellowgreen','lightskyblue']
counts = [a, b, c]
plt.figure(figsize=(8,5), dpi=80)
plt.axes(aspect=1)
plt.pie(counts, #性别统计结果labels=labels, #性别展示标签colors=colors, #饼图区域配色labeldistance = 1.1, #标签距离圆点距离autopct = '%3.1f%%', #饼图区域文本格式shadow = False, #饼图是否显示阴影startangle = 90, #饼图起始角度pctdistance = 0.6 #饼图区域文本距离圆点距离
)
plt.legend(loc='upper right',)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.title(u'微信好友性别组成')
plt.show()

这段代码获取好友列表后,从第二个好友开始统计性别,即friends[1:],因为第一个是作者本人,然后通过循环计算未设置性别0、男性1和女性2,最后通过Matplotlib库绘制饼状图。如下所示,发现作者男性朋友66.91%,女性朋友26.98%。

三. 微信自动回复及发送图片

微信发送信息调用send()函数实现,下面是发送文字信息、文件、图片和视频。

# coding-utf-8
import itchat
itchat.login()
itchat.send("Hello World!", 'filehelper')
itchat.send("@fil@%s" % 'test.text')
itchat.send("@img@%s" % 'img.jpg', 'filehelper')
itchat.send("@vid@%s" % 'test.mkv')

比如给我的微信文件助手发了个“Hello World”和一张图片。

如果想发送信息给指定好友,则核心代码如下:

#想给谁发信息,先查找到这个朋友
users = itchat.search_friends(name=u'通讯录备注名')
#找到UserName
userName = users[0]['UserName']
#然后给他发消息
itchat.send('hello',toUserName = userName)

下面这部分代码是自动回复微信信息,同时在文件传输助手也同步发送信息。

#coding=utf8
import itchat
import time# 自动回复
# 封装好的装饰器,当接收到的消息是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()myUserName = itchat.get_friends(update=True)[0]["UserName"]itchat.run()

运行结果如下图所示:

  

四. 获取微信签名并进行词云分析

最后给出获取微信好友的签名的词云分析,其friends[i]["Signature"]获取签名,最后调用jieba分词最后进行WordCloud词云分析。

# coding:utf-8
import itchat
import 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 jieba
wordlist_jieba = jieba.cut(text, cut_all=True)
wl_space_split = " ".join(wordlist_jieba)# wordcloud词云
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import PIL.Image as Image
from scipy.misc import imread
from os import path# 读取mask/color图片
d = path.dirname(__file__)
nana_coloring = imread(path.join(d, "test.png"))  # 对分词后的文本生成词云
my_wordcloud = WordCloud(background_color = 'white',      # 设置背景颜色  mask = nana_coloring,          # 设置背景图片  max_words = 2000,              # 设置最大现实的字数  stopwords = STOPWORDS,         # 设置停用词  max_font_size = 50,            # 设置字体最大值  random_state = 30,             # 设置有多少种随机生成状态,即有多少种配色方案  )
# generate word cloud
my_wordcloud.generate(wl_space_split)  # create coloring from image
image_colors = ImageColorGenerator(nana_coloring)  # recolor wordcloud and show
my_wordcloud.recolor(color_func=image_colors)  plt.imshow(my_wordcloud)    # 显示词云图
plt.axis("off")             # 是否显示x轴、y轴下标
plt.show()

输出结果如下图所示,注意这里作者设置了图片罩,生成的图形和那个类似,发现“个人”、“世界”、“生活”、“梦想”等关键词挺多的。

(By:Eastmount 2018-03-19 晚上11点  http://blog.csdn.net/eastmount/ )

[Python微信开发] 一.itchat入门知识及微信自动回复、微信签名词云分析相关推荐

  1. [python网站开发] 一.Django入门知识及创建第一个网站

    随着Python应用越来越广泛,学习Python相关知识越来越多的人选择.最新研究,Python已成为美国top高校最受欢迎的语言,同时国内用Python开发的网站越来越多,比较知名的网站如知乎.豆瓣 ...

  2. 计算机编程书籍-Python硬件开发树莓派从入门到实践无人驾驶 AndroidTV 自动循迹

    内容简介 <Python硬件开发树莓派从入门到实践>全书可大致分为4个部分,其中第13章介绍了树莓派的基本使用:第4章介绍了如何在树莓派上使用Python的OpenCV包:第58章介绍了树 ...

  3. 学python需要什么基础知识-学习Python需要知道哪些基础入门知识?

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python就业前景广阔.很多 ...

  4. 盘点Python网页开发轻量级框架Flask知识(下篇)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 一曲新词酒一杯,去年天气旧亭台. ...

  5. python 编程环境 微信_微信开发之新浪SAE上配置WeRoBot微信机器人,python,Mac环境...

    本文将带你了解微信开发新浪SAE上配置WeRoBot微信机器人,python,Mac环境,希望本文对大家学微信有所帮助. 废话不多说,直接上过程. 注册新浪sae,选择创建云应用,创建新应用,填好相关 ...

  6. Java面向对象程序开发——网络编程入门知识

    目录 七.网络编程入门知识 软件结构 网络通信协议 协议分类 网络编程三要素 TCP通信程序 概述 Socket类 构造方法 成员方法 ServerSocket类 构造方法 成员方法 简单的TCP网络 ...

  7. 微信开发(一):用JSAPI做微信支付+微信卡包(代金券)

    做微信支付前期准备: 1,服务好开通微信支付. 2,公众账号ID:AppId. 3,公众账号密钥:AppSecret. 4,微信支付密钥:Key. 第一步:获取用户信息并跳转到需要微信支付的页面 pu ...

  8. Python 之 pygame 学习(入门知识)

    Pygame 致力于 2D 游戏的开发 参考pygame菜鸟入门指南 文章目录 一.下载安装 Pygame 二.Pygame 常用模块 三.常用模块的常用方法 四.知道什么是surface 五.使用s ...

  9. python爬虫从基础到实战-2019-08-05 《python爬虫开发:从入门到实战》

    1.正则表达式 学习了简单的正则表达式使用.通过这个书发现,实际爬虫过程中,用正则表达式去匹配内容,并不是非常常用. xpath更好用一点. 2.简单网页爬虫开发 2.1 用python获取网页源码 ...

最新文章

  1. 都啥时候了,你还怕学了Python找不到工作?
  2. 又一无人机新法案将出炉,这次比FAA规定还严
  3. 编程成长日记——有意思的编程题(二)
  4. 32位汇编语言helloworld_梦开始的地方——Hello World!
  5. .net通过获取客户端IP地址反查出用户的计算机名
  6. 如何在Node.js(Javascript)中等待,我需要暂停一段时间?
  7. python包接口,Typetalk聊天API的python接口包
  8. 【机卓14蒋海平-U201411018】机电传动控制课程-《自动化技术中的进给电气传动》第一章的1.1节和1.2节——读书笔记整理...
  9. [vue] vue在created和mounted这两个生命周期中请求数据有什么区别呢?
  10. 字符串匹配(一)—— KMP / MP
  11. php代码审计是什么意思,php代码审计基础篇
  12. python线程,进程,队列和缓存
  13. 奇怪的UIPanel控件
  14. 7 Python文件和数据格式化
  15. R语言绘图|二维数据密度图
  16. HTG评论Yoga Tablet 2 Pro:内置Pico投影仪可延长电池寿命
  17. Word 2016双击格式刷无法连用的问题
  18. 创业1年半,烧光130万:我总结了哪些教训?
  19. 2021 苟且活着,2022 向上生长
  20. 相关EI/SCI期刊

热门文章

  1. sys.dbms_transaction.local_transaction_id出现的问题
  2. BZOJ2209: [Jsoi2011]括号序列
  3. 动手动脑,产生随机数
  4. python实现网页登录时的rsa加密流程
  5. winform弹出唯一窗体的方法
  6. “进度条”博客——第四周
  7. JAVA I/O流工具类TextFile
  8. JUnit3 结合一个除法的单元测试说明Assert.fail()的用法
  9. (转)WindowsPhone基础琐碎总结-----数据绑定(一)
  10. owls-uddi-matchmaker安装