用Python爬取微信好友签名并生成词云(解决词云白板问题)

2023-11-10

今天上班看到一篇关于用Python爬取微信好友签名并生成词云的文章,觉得很有趣,就学着尝试爬取自己的微信好友签名,菜鸟写代码,总是会出现很多问题,摸索了一天,终于成功了。记录下自己的经过,希望能给像自己一样的小白一点点参考
本博客代码参考https://github.com/ablo120/PythonLearn/blob/master/wechat_friend.py
前言:建议Python小白安装anaconda,它集成了Python及Python的很多库。对于小白,Python库的安装是个很头疼的问题,anaconda可以很好地解决这个问题。安装anaconda后,以后安装其他库时,直接pip install 《库名》,基本可以完成安装。

1、用itchat模块登录微信
直接pip install itchat 安装itchat。

#登录微信
import itchat
itchat.login()        #有个登录二维码图片弹框,用自己微信扫码登录即可
#获取微信朋友信息
friends=itchat.get_friends(update=True)[0:]
print(friends)

返回一个json数据,如下图:
在这里插入图片描述
2、分析微信好友的男女比例
这里定义个函数parse_friends()来表示,用循环来遍历微信好友,获取性别信息保存在text字典文件里

def parse_friends():
    itchat.login()
    text=dict()
    friends=itchat.get_friends(update=True)[0:]
    print(friends)
    male = 'male'
    female='female'
    other='other'
    for i in friends[1:]:
        sex = i['Sex']   #注意Sex大写,表示微信里的性别
        if sex==1:       #1的来源于上图画线部分,标志位为1,表示男性
            text[male]=text.get(male,0)+1
        elif sex==2:
            text[female]=text.get(female,0)+1
        else:
            text[other]=text.get(other,0)+1
    total=len(friends[1:])
    print(
          "男性好友:%.2f%%"%(float(text[male])/total*100)+"\n"+
          "女性好友: %.2f%%" % (float(text[female]) / total * 100) + "\n" +
          "不明性别好友: %.2f%%" % (float(text[other]) / total * 100)
          )
    print('好友数量:%.2f' % total)
    draw(text)

使用plt库画性别柱状图

def draw(datas):
    for key in datas.keys():
        plt.bar(key,datas[key])
    plt.legend()
    plt.xlabel('sex')
    plt.ylabel('rate')
    plt.title("Gender of dudumei's friends")
    plt.show()

最后打印的结果以及柱状图如下:
我共有1001个好友,男性同胞占了大部分
在这里插入图片描述在这里插入图片描述
3、获取微信好友微信签名
定义一个parse_signature()函数,用for循环,筛选出好友签名,用正则表达式去掉span,class,emoji等字眼。

def parse_signature():
    siglist=[]
    SIGNATURE_PATH ='F:/files/signature.txt'  #尽量先把路径赋值给一个变量,这样就不用考虑符号转义问题
    friends =itchat.get_friends(update=True)[1:]
    for i in friends:
    	## 获取个性签名,替换掉span,class,emoji
        signature = i["Signature"].strip().replace("span","").replace("class","").replace("emoji","")
        # 正则匹配过滤掉emoji表情,例如emoji1f3c3等
        rep=re.compile("1f\d+\w*|[<>/=]")
        signature=rep.sub("",signature)
        siglist.append(signature)
    # 拼接字符串
    text="".join(siglist)    
    with io.open(SIGNATURE_PATH,'w',encoding='utf-8')as f:   
		# jieba分词
        wordlist=jieba.cut(text,cut_all=True)
        word_space_split=" ".join(wordlist)	#这里的“ ”之间一定要有空格,没有空格会引发白板问题
        f.write(word_space_split)
        f.close()
    draw_signature(SIGNATURE_PATH)  

4、绘制词云

def draw_signature(path):
    f=open(path,'r',encoding='utf-8').read()
    cut_text=" ".join(jieba.cut(f))
    #找一张图来生成配色方案,图3.png路径在F:/files下
    coloring=np.array(Image.open('F:/files/3.png'))
    my_wordclound=WordCloud(background_color='white', # 设置背景颜色
                            max_words=6000,   # 设置最大显示的字数
                            mask=coloring,   # 设置背景图片
                            max_font_size=60,    # 设置字体最大值
                            random_state=42,  # 设置有多少种随机生成状态,即有多少种配色方案
                            scale=2,font_path='C:/Windows/Fonts/simfang.ttf',  # 设置字体格式,如不设置会乱码
                            ).generate(cut_text)
    image = WordCloud.to_image(my_wordclound)
    image.show()

最后生成的词云如图所示:
在这里插入图片描述
总结遇到的问题:
1、路径问题,最好把路径赋值给变量,这样就可以减少转义问题
2、函数调用问题,参考网上一些其他人的代码,可能明明代码没有错误,但就是运行不成功,多数要考虑函数调用问题
3、白板问题:在确认代码无误的情况下,依旧显示不出词云,只是一个空白的图像,后来发现是因为少了空格

    word_space_split=" ".join(wordlist)	#这里的“ ”之间一定要有空格,没有空格会引发白板问题

第一次写Python博客,如有错误,请多指教。下面附上完整代码

import wordcloud
import itchat
import re
import io
import os
from os import path
import jieba
import numpy as np
from PIL import Image
import random
import matplotlib.pyplot as plt
from matplotlib import pyplot as plt
from wordcloud import WordCloud
def draw(datas):
    for key in datas.keys():
        plt.bar(key,datas[key])
    plt.legend()
    plt.xlabel('sex')
    plt.ylabel('rate')
    plt.title("Gender of dudumei's friends")
    plt.show()
def parse_friends():
    itchat.login()
    text=dict()
    friends=itchat.get_friends(update=True)[0:]
    print(friends)
    male = 'male'
    female='female'
    other='other'
    for i in friends[1:]:
        sex = i['Sex']
        if sex==1:
            text[male]=text.get(male,0)+1
        elif sex==2:
            text[female]=text.get(female,0)+1
        else:
            text[other]=text.get(other,0)+1
    total=len(friends[1:])
    print(
          "男性好友:%.2f%%"%(float(text[male])/total*100)+"\n"+
          "女性好友: %.2f%%" % (float(text[female]) / total * 100) + "\n" +

          "不明性别好友: %.2f%%" % (float(text[other]) / total * 100)
          )
    print('好友数量:%.2f' % total)
    draw(text)

def parse_signature():
    siglist=[]
    SIGNATURE_PATH ='F:/files/signature.txt'
    friends =itchat.get_friends(update=True)[1:]
    for i in friends:
        signature = i["Signature"].strip().replace("span","").replace("class","").replace("emoji","")
        rep=re.compile("1f\d+\w*|[<>/=]")
        signature=rep.sub("",signature)
        siglist.append(signature)
    text="".join(siglist)
    with io.open(SIGNATURE_PATH,'w',encoding='utf-8')as f:
        wordlist=jieba.cut(text,cut_all=True)
        word_space_split=" ".join(wordlist)
        f.write(word_space_split)
        f.close()
    draw_signature(SIGNATURE_PATH)
def draw_signature(path):
    f=open(path,'r',encoding='utf-8').read()
    cut_text=" ".join(jieba.cut(f))
    coloring=np.array(Image.open('F:/files/3.png'))
    my_wordclound=WordCloud(background_color='white',
                            max_words=6000,mask=coloring,
                            max_font_size=60,random_state=42,
                            scale=2,font_path='C:/Windows/Fonts/simfang.ttf',
                            ).generate(cut_text)

    image = WordCloud.to_image(my_wordclound)
    image.show()

parse_friends()
parse_signature()


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

用Python爬取微信好友签名并生成词云(解决词云白板问题) 的相关文章

  • 【Qt】控件探幽——QLineEdit

    注1 本系列文章使用的Qt版本为Qt 6 3 1 注2 本系列文章常规情况下不会直接贴出源码供复制 都以图片形式展示 所有代码 自己动手写一写 记忆更深刻 本文目录 QLineEdit探幽 1 设置数据 获取数据 2 只读 readOnly
  • 2023年华为od机试Java【人气最高的店铺】

    题目 某城市有m个商店和n位市民 现在要举行一场活动 通过投票来选出最受欢迎的商店 每位市民只能投一票 他们将根据自己的喜好为指定的商店投票 然而 1号商店有一个特殊的优势 它可以给每位市民发放补贴 使他们改变投票意向 投票给1号商店 请你
  • 超级计算机是几近制,进制

    进制也就是进位计数制 是人为定义的带进位的计数方法 有不带进位的计数方法 比如原始的结绳计数法 唱票时常用的 正 字计数法 以及类似的tally mark计数 对于任何一种进制 X进制 就表示每一位置上的数运算时都是逢X进一位 十进制是逢十
  • 第 5 章 HBase 优化

    5 1 RowKey 设计 一条数据的唯一标识就是 rowkey 那么这条数据存储于哪个分区 取决于 rowkey 处于 哪个一个预分区的区间内 设计 rowkey的主要目的 就是让数据均匀的分布于所有的 region 中 在一定程度上防止
  • git原理探索实验1——git的三种对象

    背景知识 git的三个区域 working directory 也就是你当前所能操作的那些目录和文件 history 你所提交的所有记录 文件历史内容等等 git是个分布式版本管理系统 在你本地有项目的所有历史提交记录 文件历史记录 提交日
  • MR 从 mysql中 读取 和 写入 数据

    1 编写DBWritable类 import org apache hadoop io Writable import org apache hadoop mapred lib db DBWritable import java io Da
  • ROS Qt环境的搭建及基础知识介绍

    ROS Qt环境的搭建及基础知识介绍 文章目录 ROS Qt环境的搭建及基础知识介绍 1 开发环境搭建 1 1 qtcreator安装 1 2 catkin create qt pkg环境配置 1 3 配置功能包 2 Qt基础 3 Qt编译
  • Python知识点(史上最全)

    Python期末考试知识点 史上最全 python简介 Python是一种解释型语言 Python使用缩进对齐组织代码执行 所以没有缩进的代码 都会在载入时自动执行 数据类型 整形 int 无限大 浮点型 float 小数 复数 compl
  • 区块链节点和用户的介绍

    用户身份 用户身份的概念 用户身份是由用户的公钥地址 用户私钥共同组成 私钥签名 公钥验签 公钥加密 私钥解密 公钥是对外公布的密钥 私钥由用户个人保存 发送交易时用接收方公钥进行加密 发送方私钥进行签名 接收交易时用接收方私钥进行解密 发
  • 【项目实战】基于python+pycharm+OpenCV的信用卡数字识别

    一 pycharm实现参数配置 直接运行程序会报错 usage ocr template match py h i IMAGE t TEMPLATE ocr template match py error the following arg
  • 当AI遇到IoT:开启智能生活的无限可能

    文章目录 1 AI和IoT的融合 1 1 什么是人工智能 AI 1 2 什么是物联网 IoT 1 3 AI和IoT的融合 2 智能家居 2 1 智能家居安全 2 2 智能家居自动化 3 医疗保健 3 1 远程监护 3 2 个性化医疗 4 智
  • 泰勒(Taylor)公式

    泰勒公式 如果函数f x 在含的某个开区间 a b 内具有直到 n 1 阶导数 则可以用泰勒展开公式去逼近原函数 麦克劳林公式 特殊 0 几个常见的初等函数的带有佩亚诺余项的麦克劳林公式
  • Windows10本地搭建网站教程 - 内网穿透发布公网访问

    文章目录 概述 1 搭建一个静态Web站点 2 本地浏览测试站点是否正常 3 本地站点发布公网可访问 3 1 安装cpolar内网穿透 3 2 创建隧道映射公网地址 3 3 获取公网URL地址 4 公网远程访问内网web站点 5 配置固定二

随机推荐

  • 硬件3D加速指南

    硬件3D加速指南 内容 1 解释 2 安装Xorg和配置内核 3 配置直接渲染 4 测试3D加速 5 疑难解答 6 参考 1 解释 什么是硬件3D加速 为什么我需要它 使用硬件3D加速 三维渲染将会使用显卡上的图形处理器来进行 而不会占据宝
  • macOS 软件推荐&避雷指南 - 让 mac 更像 windows 的装机必备软件

    网络上有很多 macOS 软件推荐的文章 但是那些文章大部分有下面的问题 没有结合使用场景 没有差评 从来不会说一个软件有什么缺点 是否稳定 所以这篇文章就围绕下面 2 点展开 安装哪些软件 可以让 macOS 的体验更加接近 window
  • 解决maven依赖冲突,这篇就够了!

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Python电脑随机生成1~100之间的整数, 让用户来猜,猜错时,会提示猜的数 字是大了还是小了,直到用户猜对为止,游戏结束

    定义一个函数 完成用户输入的三个数字的求和 以及在另一个函数求该和的平均值 用到函数传参 函数返回值 def sum num1 num2 num3 return num1 num2 num3 def average num1 num2 nu
  • AD20批量修改丝印大小、更改丝印字体、丝印显示中文、更改位号丝印 相对元件的位置

    AD默认的丝印不大美观 那么多位号的丝印 想一个个单个去修改显得不现实 这里借助全局批量修改 快速更改丝印的字体 大小 显示中文 相对元件位置 AD20批量修改丝印大小 字体 选中其中一个丝印 右键 查找相似对象 将 Designator
  • COM读书笔记---- 编程工作的简化

    参考书籍 lt
  • Java中InputStream转化为MultipartFile类型

    由于工作需要 涉及到文件类型的转化 实际上MultipartFile有方法可以直接转化为InputStream 但是并没有办法可以从InputStream直接转化为MultipartFile 网上的资料大概看了下 有两种简单的方案Commo
  • ADC-dma死循环问题

    方法一 初始化dma时候 里面会先使能dma 然后打开相应的中断 然后结果会导致main函数中卡死 卡在箭头处 也就是打不开adc和dma 解决方案 全部注释 只留第一个配置dma的函数 11 16 补充 同样的现象 程序卡死在HAL AD
  • stm32Cubemx实用篇(一):PWM控制SG90舵机

    stm32Cubemx 一 PWM控制SG90舵机 本章将介绍使用stm32Cubemx软件配置PWM来控制SG90舵机角度 硬件平台 Stm32H743IIT6 舵机 SG90 0 180 旋转范围 网购5元一个 软件 Stmcubemx
  • [ 容器 ] Docker 基本管理

    目录 一 Docker 概述 1 1 Docker 是什么 1 2 Docker 的宗旨 1 3 容器的优点 1 4 Docker 与 虚拟机的区别 1 5 容器在内核中支持的两种技术 namespace的六大类型 二 Docker核心概念
  • ubuntu卸载软件

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 打开终端 你将使用 apt get 命令 这是用于管理已安装程序的通用命令 在卸载程序时 你可能需要输入管理员密码 当你输入密码时 密码将不会被显示 完成输入后按回车即
  • PrintWriter返回乱码的分析及解决

    用response得到输出流 即response getOuptStream 返回值为ServletOutputStream 对象 即JSP的out对象 要么用response得到输出对象PrintWriter即response getWr
  • 十三、Linux中虚拟化的使用

    十三 Linux中虚拟化的使用 13 1 Linux中kvm虚拟化软件的安装及硬件设定 安装条件 对于Intel的cpu 要有vmx 对于amd的cpu 要有svm 执行cat proc cpuinfo grep vmx查看 1 搭建好软件
  • 保姆级mysql8.0.32安装配置教程(windows 64位)以及mysql的root密码忘记怎么办

    1 官网下载MySQL 下载Mysqlhttps dev mysql com downloads mysql 可能需要登录Oracle账户 下载完成后解压到某一个文件夹 记住这个路径 一会要用到 我的配置环境习惯性放在E盘 2 配置初始化文
  • leetcode1588、所有奇数长度子数组的和(c++)

    leetcode1588 所有奇数长度子数组的和 c 难度 简单 给你一个正整数数组 arr 请你计算所有可能的奇数长度子数组的和 子数组 定义为原数组中的一个连续子序列 请你返回 arr 中 所有奇数长度子数组的和 示例1 输入 arr
  • 基于MVC的博客系统【JavaWeb项目】

    项目说明书 一 摘要 博客系统是一个使用JavaWeb技术开发的博文及不同用户交流的平台 博客系统是一个简单的博文交流的web平台 可以满足用户简单的博文管理需求 操作简单 主要包含以下几个方面 登录注册 查看所有用户的博客文章 对博文进行
  • 10开机蓝屏无限重启_Win10蓝屏代码PAGE_FAULT_IN_NONPAGED_AREA的解决方法

    电脑继1803更新后第4次蓝屏了 原本蓝屏后自动重启后就会恢复正常 然而天真的我太低估了微软的实力 蓝屏 重启 蓝屏 重启无限循环 当然 重启几次就进入了高级模式 高级模式 进去疑难解答 高级选项 试了试启动修复 没用 继续 搜索蓝屏代码P
  • flink程序运行问题

    异常 kafka分区连接超时 phoinex启动阻塞 发现hbase起不来 hdfs报错Please check the logs or run fsck in order to identify the missing blocks 解决
  • ntp服务器是什么,有什么用?

    https www idcbest com servernews 11002256 html ntp服务器隶属于小众时间频率行业 对于初次接触者和未涉猎此行业的人群来说 就会有很大的疑问 ntp服务器能做什么 为什么会需要ntp服务器 本文
  • 用Python爬取微信好友签名并生成词云(解决词云白板问题)

    今天上班看到一篇关于用Python爬取微信好友签名并生成词云的文章 觉得很有趣 就学着尝试爬取自己的微信好友签名 菜鸟写代码 总是会出现很多问题 摸索了一天 终于成功了 记录下自己的经过 希望能给像自己一样的小白一点点参考 本博客代码参考h