python微信个签生成云图

xiaohei6856
发布于 2023-10-19 / 132 阅读 / 0 评论 / 0 点赞

python微信个签生成云图

原文地址

https://juejin.cn/post/6844903812763746311?searchId=20231018232955128506A8315CFCFDA4D1

由于原文是很早的代码,而且没有告诉任何版本信息,所以现在跑的时候会遇到各种问题,因此写下了这篇文章

import itchat  # 导入 itchat 模块,用于与微信进行交互
import re  # 导入正则表达式模块
import jieba  # 导入分词模块
import matplotlib.pyplot as plt  # 导入用于绘制图表的模块
from wordcloud import WordCloud, ImageColorGenerator  # 导入生成词云的模块
from scipy.misc import imread  # 导入用于处理图像的函数

sign_list = []  # 用于存储好友的个性签名

# 使用 itchat 进行微信登录
# login by scan QRCode
itchat.auto_login(enableCmdQR=2)

# itchat.auto_login(enableCmdQR=2)  # hotReload=True 允许热加载登录信息
itchat.send(u'Hello,world', 'filehelper')  # 发送消息给文件传输助手

friends = itchat.get_friends(update=True)  # 获取所有好友信息
print('开始获取微信好友个性签名.....')

# 遍历好友列表,获取个性签名
for i in friends:
    signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")  # 过滤掉表情
    rep = re.compile("[^\u4e00-\u9fa5^]")  # 使用正则表达式去除非中文字符
    nickName = i["NickName"]
    signature = rep.sub("", signature)  # 用空字符替代非中文字符
    sign_list.append(signature)

text = ''.join(sign_list)  # 将所有个性签名连接成一个字符串

wordlist_jieba = jieba.cut(text, cut_all=True)  # 使用 jieba 进行分词
wl_space_split = ' '.join(wordlist_jieba)  # 用空格分隔分词结果

back_color = imread('./img/touxiang.jpg')  # 读取背景图像,用于生成词云

# 词云生成
my_wordcloud = WordCloud(
    background_color='white',  # 背景颜色
    max_words=2000,  # 最大词数
    mask=back_color,  # 以该参数值作图绘制词云,这个参数不为空时,width 和 height 会被忽略
    max_font_size=100,  # 显示字体的最大值
    font_path='C:/Windows/Fonts/simfang.ttf',  # 指定字体文件,解决中文字体乱码问题
    random_state=42,  # 为每个词返回一个 PIL 颜色
)

# 用 wl_space_split 生成词云
my_wordcloud.generate(wl_space_split)

# 基于彩色图像生成响应的色彩
image_colors = ImageColorGenerator(back_color)

# 显示图片
plt.figure()
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.axis('off')  # 关闭坐标轴

# 保存图片
my_wordcloud.to_file('ciyun.png')

所需版本

  • python:3.7.16
  • pip:22.3.1
  • 最好装一个Anaconda最新就行

所需模块版本

  • itchat 1.3.10
  • itchat-uos 1.5.0.dev0
  • jieba 0.42.1
  • matplotlib 3.5.3
  • scipy 1.2.1
  • wordcloud 1.9.2

安装模块

# 部分你可以尝试安装新版本,但是有些需要低版本,否则有问题
pip install itchat==1.3.10
# 这个必须要安装,跟itchat搭配,否则登陆不上
# https://blog.csdn.net/qq_41785288/article/details/132393518
pip install itchat-uos==1.5.0.dev0
pip install jieba==0.42.1
pip install matplotlib==3.5.3
# scipy这个最好安装这个版本,否则会有问题
# ImportError: cannot import name 'imread' from 'scipy.misc'
# https://learnku.com/articles/41883
pip install scipy==1.2.1
pip install wordcloud==1.9.2
  1. Caused by SSLError(“Can’t connect to HTTPS URL because the SSL module is not available. 如果出现问该问题,说明在使用requests包访问https请求时,出现了SSLError。
Traceback (most recent call last):
  File "C:\ProgramData\anaconda3\envs\wordcloudpython\lib\site-packages\itchat\utils.py", line 125, in test_connect
    r = requests.get(config.BASE_URL)
  File "C:\ProgramData\anaconda3\envs\wordcloudpython\lib\site-packages\requests\api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "C:\ProgramData\anaconda3\envs\wordcloudpython\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\ProgramData\anaconda3\envs\wordcloudpython\lib\site-packages\requests\sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\ProgramData\anaconda3\envs\wordcloudpython\lib\site-packages\requests\sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
    chunked=chunked,
  File "C:\ProgramData\anaconda3\envs\wordcloudpython\lib\site-packages\urllib3\connectionpool.py", line 770, in urlopen
    conn = self._get_conn(timeout=pool_timeout)
  File "C:\ProgramData\anaconda3\envs\wordcloudpython\lib\site-packages\urllib3\connectionpool.py", line 296, in _get_conn
    return conn or self._new_conn()
  File "C:\ProgramData\anaconda3\envs\wordcloudpython\lib\site-packages\urllib3\connectionpool.py", line 1062, in _new_conn
    "Can't connect to HTTPS URL because the SSL module is not available."
ImportError: Can't connect to HTTPS URL because the SSL module is not available.

You can't get access to internet or wechat domain, so exit.

解决办法 https://github.com/conda/conda/issues/8273

image-bsze.png conda找错了openssl的地址,conda在Anaconda\DLLs目录下寻找openssl的dll文件,但实际上需要的dll在Anaconda3\library\bin目录下。因此只需要将这两个文件复制到 Anaconda\DLLs下即可。

image-zris.png 2. ProxyError: HTTPSConnectionPool(host='login.weixin.qq.com', port=443)

requests.exceptions.ProxyError: HTTPSConnectionPool(host='login.weixin.qq.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', OSError(0, 'Error')))

把翻墙软件关掉,即可。 3. Log in time out, reloading QR code. 此时还有一个登录超时问题,待解决,这个问题解决不解决都可以顶多会麻烦一些。

Log in time out, reloading QR code.

原因是手机扫码后有异地登录验证,会等待5s,而此时itchat判断登录超时,又刷新了二维码,导致一直登录不上。 解决办法是修改 itchat的 login.py 源码 https://github.com/zhayujie/chatgpt-on-wechat/blob/master/lib/itchat/components/login.py 可以参考人家的。 不想改的话,可能会扫码多次,你需要动作快一点点登录即可。

上面都修改过之后,在当前文件夹,运行就行。