原文地址
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
- 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
conda找错了openssl的地址,conda在Anaconda\DLLs目录下寻找openssl的dll文件,但实际上需要的dll在Anaconda3\library\bin目录下。因此只需要将这两个文件复制到 Anaconda\DLLs下即可。
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 可以参考人家的。 不想改的话,可能会扫码多次,你需要动作快一点点登录即可。
上面都修改过之后,在当前文件夹,运行就行。