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

2023-11-15

最近准备学习微信小程序开发,偶然间看到了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 += 1
    elif sex == 2:
        female += 1
    else:
        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 re

itchat.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/ )


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 目标检测 3—— 人脸检测

    笔记来源 DeepLearning 500 questions 上次学习了目标检测的基本概念 Two Stage和 One Stage 算法 1 目标检测Two Stage 2 目标检测One Stage 4 人脸检测 在目标检测领域可以划
  • rk3368 Android9.0 HIDL调试记录

    rk3368 Android9 0 HIDL调试记录 Platform RK3368 OS Android 9 0 Kernel 4 4 194 文章目录 rk3368 Android9 0 HIDL调试记录 1 使用hidl gen工具生
  • AD使用插件生成交互式BOM

    AD使用插件生成交互式BOM 1 下载AD用交互式BOM插件 首先前往GitHub下载这位大佬开发的插件 地址 https github com lianlian33 InteractiveHtmlBomForAD 下载完成后打开文件所在位
  • 请实现一个简单的网页计算器(vue)

    练习一下父组件向子组件传值 计算部分用eval方法实现 运行截图如下 话不多说 上代码 页面结构 div div
  • JAVA08_Stream流anyMatch和allMatch和noneMatch的区别

    allMatch全匹配 判断数据列表中全部元素都符合设置的predicate条件 如果是就返回true 否则返回false 流为空时总是返回true 接口定义 boolean allMatch Predicate
  • 【华为】Redis客户端API使用(java)

    1 概述 目标读者 本文档专供需要Redis客户端API调用的开发人员 适用于具备Java开发经验的开发人员 简介 Redis客户端通过API调用 向Redis发起命令调用 向Redis或写入或读出数据 基本概念 Redis服务端 提供服务
  • 计算机cpi的公式,EAC=BAC/CPI;EAC=AC+( BAC-EV)/CPI公式分别在什么情况下使用?

    EAC BAC CPI EAC AC BAC EV CPI公式分别在什么情况下使用 来源 信管网 2018年10月30日 所有评论 横渡大漠 cnitpm com 08 21 35 帮忙解释一下 什么情况下用EAC BAC CPI 算 什么
  • 木兰开源社区分论坛

    ChinaOSC 2022 木兰开源社区 技术论坛将于 2022年8月21日15 00 17 30 在陕西省西安高新国际会议中心 会议室 召开 聚焦开源许可证与标准 探索开源发展模式 为国内开源产业打地基 木兰开源社区做了什么 还要怎么做
  • 黑客攻防入门(二)shellcode构造

    1 概说 shell我们都知道是什么了吧 狭义的shellcode 就是一段可以运行shell的代码 构造一段shellcode的作用就是为了在缓冲区溢出时将shellcode的地址覆盖掉正常的返回地址 shellcode通常放在缓冲区内
  • 视觉工程师手写文档之优秀程序员指南篇

    首先 这是我从第一次开始走出校园就一直在完善的一些指南 本来是给自己看的 但现在离职期间再翻看到之后 感触良多 就做了分享 里面很多内容是我在CSDN技术博客上看到的 我认为写的很好的 有些是我自己的总结 大家看看就好
  • Android 中简单计时器的实现方法(Handler和TimerTask)

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 方法一 用handler线程创建计时器 计时器效果如下 第一步 写xml文件
  • 09-1_Qt 5.9 C++开发指南_Qchart概述

    Qt Charts 可以很方便地绘制常见的折线图 柱状图 饼图等图表 不用自己耗费时间和精力开发绘图组件或使用第三方组件了 本章首先介绍 Qt Charts 的基本特点和功能 以画折线图为例详细说明 Qt Charts 各主要部件的操作方法
  • 算法基础课:第一讲——基础算法

    文章目录 前言 排序 1 快速排序 作用 算法思想 模板 例题 AC代码 2 归并排序 作用 算法思想 模板 例题 AC代码 二分 1 整数二分 作用 算法思想 模板 例题 AC代码 总结 2 浮点数二分 算法思想 模板 例题 AC代码 高
  • vue中ref的使用

    今天看了别人写的代码 有些地方不太理解 查阅资料之后真的是受益匪浅 在这里分享给大家
  • 从0到1使用 Webpack5 + React + TS 构建标准化应用

    前言 本篇文章主要讲解如何从一个空目录开始 建立起一个基于webpack react typescript的标准化前端应用 技术栈 webpack5 React18 TS 工程化 eslint prettier husky git hook
  • 田志刚:个人知识管理常用软件、工具介绍

    一把菜刀 厨师可以用来做出可口的美味佳肴 也可以被犯罪分子利用作为伤害人的凶器 这就是工具的特性 个人知识管理的工具 软件也是如此 个人知识管理工具 软件和系统是个人管理自己知识的一个热点问题 我们认为在工具的选择和使用上主要需做到知理 知
  • 文件对象MultipartFile和文件对象File的使用方法

    1 前端上传的文件对象file public String upload MultipartFile file throws IOException String originalFilename file getOriginalFilen
  • 如何轻松实现内网穿透?异地办公?调试微信小程序?

    步骤很简单 只需三步 1 从 https www i996 me 获取获取你的公网域名和访问Token 项目托管在 https github com bugfan i996 2 在Max Linux 环境下 Windows类似 打开一个终端
  • AD20.0.1上手教程——机器狗

    我们假装已经安装好了AD 首先 我们先理一下AD这个软件的逻辑 一个项目包含一个工程 PrjPCB 里面有一个源文件和库文件两类 源文件包括原理图 SchDoc 和印制版图 PcbDoc 库文件包括封装库 PcbLib 和原理图库 SchL
  • [Python微信开发] 一.itchat入门知识及微信自动回复、微信签名词云分析

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