欢迎大家访问我的个人网站《刘江的博客和教程》:www.liujiangblog.com

主要分享Python 及Django教程以及相关的博客

今天偶然看见http://www.cnblogs.com/jiaoyu121/p/6944398.html#top博客,用Python玩转微信,写得非常好。

然而,貌似用的Python2版本,并且每次执行都要重复扫码登录,这对于我这种Python3的用户是不行的。

动起手来,自己干!

1. 安装相应的库

pip install itchat

pip install echarts-python

2. 实现登陆状态保存:

import itchat

itchat.auto_login(hotReload=True)
itchat.dump_login_status()

这样你就可以保持一段时间登录状态,而不用每次运行代码都要扫码登录了!

首次登录,程序会弹出一个二维码图片窗口,用微信手机客户端扫码就可以登录了!

3. 使用饼图展示个人好友性别分布

有一个echarts-python库可以帮助你方便的使用python代码在浏览器中展示百度Echart图。但是,但是,这个库是Python2的,

Python3用起来水土不服,没办法只好根据错误修改库的源码!下图显示了应该改的两个地方(其实还有很多地方)。

改完库的源码,就可以执行代码了。借用前人的代码,修改了一下:

#!/usr/bin/env python
# -*- coding:utf-8 -*- import itchat itchat.auto_login(hotReload=True)
itchat.dump_login_status() friends = itchat.get_friends(update=True)[:]
total = len(friends) - 1
male = female = other = 0 for friend in friends[1:]:
sex = friend["Sex"]
if sex == 1:
male += 1
elif sex == 2:
female += 1
else:
other += 1
# print("男性好友:%.2f%%" % (float(male) / total * 100))
# print("女性好友:%.2f%%" % (float(female) / total * 100))
# print("其他:%.2f%%" % (float(other) / total * 100)) from echarts import Echart, Legend, Pie
chart = Echart('%s的微信好友性别比例' % (friends[0]['NickName']), 'from WeChat')
chart.use(Pie('WeChat',
[{'value': male, 'name': '男性 %.2f%%' % (float(male) / total * 100)},
{'value': female, 'name': '女性 %.2f%%' % (float(female) / total * 100)},
{'value': other, 'name': '其他 %.2f%%' % (float(other) / total * 100)}],
radius=["50%", "70%"]))
chart.use(Legend(["male", "female", "other"]))
del chart.json["xAxis"]
del chart.json["yAxis"]
chart.plot()

运行代码,测试一下,成功在浏览器展示出来了:

我好想暴露了什么....

4. 好友个性签名词云

分析好友信息,能发现个性签名,可以用它做词云。

for friend in friends:
signature = friend["Signature"].strip()
signature = re.sub("<span.*>", "", signature)
signature_list.append(signature)
raw_signature_string = ''.join(signature_list)

上面利用正则,去掉一些类似<span class=....>以及空格之类的无用字符。然后把他们连成一个大的长的字符串

pip install jieba

这个库是用来将字符串拆分成不重复的一个一个的词的,貌似都是2字词。

pip install wordcloud

安装词云库,会弹出错误如下图

怎么办?去http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 页面下载所需的wordcloud模块的whl文件

下载后进执行“pip install wordcloud-1.3.1-cp36-cp36m-win_amd64.whl”,就可以了。意文件路径。

利用jieba的cut方法将字符串裁成一个一个的词,然后用空格,将它们又连起来。注意是用空格哦!千万别看错了!

text = jieba.cut(raw_signature_string, cut_all=True)
target_signatur_string = ' '.join(text)

再导入一些辅助的库

import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import PIL.Image as Image
import os
import numpy as np

这些库,有的会自动安装,有的可能要你自己装,比如pip install numpy

然后提供一张图片。

wordcloud会根据这张图片在x和y轴上的颜色以及范围等等,布置词云。这个过程是通过numpy的矩阵和matplot的画图能力实现的。

下面的源码是根据原文的代码略微修改后的。

#!/usr/bin/env python
# -*- coding:utf-8 -*- import itchat
import re
import jieba def echart_pie(friends):
total = len(friends) - 1
male = female = other = 0 for friend in friends[1:]:
sex = friend["Sex"]
if sex == 1:
male += 1
elif sex == 2:
female += 1
else:
other += 1
from echarts import Echart, Legend, Pie
chart = Echart('%s的微信好友性别比例' % (friends[0]['Name']), 'from WeChat')
chart.use(Pie('WeChat',
[{'value': male, 'name': '男性 %.2f%%' % (float(male) / total * 100)},
{'value': female, 'name': '女性 %.2f%%' % (float(female) / total * 100)},
{'value': other, 'name': '其他 %.2f%%' % (float(other) / total * 100)}],
radius=["50%", "70%"]))
chart.use(Legend(["male", "female", "other"]))
del chart.json["xAxis"]
del chart.json["yAxis"]
chart.plot() def word_cloud(friends):
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import PIL.Image as Image
import os
import numpy as np
d = os.path.dirname(__file__)
my_coloring = np.array(Image.open(os.path.join(d, "2.png")))
signature_list = []
for friend in friends:
signature = friend["Signature"].strip()
signature = re.sub("<span.*>", "", signature)
signature_list.append(signature)
raw_signature_string = ''.join(signature_list)
text = jieba.cut(raw_signature_string, cut_all=True)
target_signatur_string = ' '.join(text) my_wordcloud = WordCloud(background_color="white", max_words=2000, mask=my_coloring,
max_font_size=40, random_state=42,
font_path=r"C:\Windows\Fonts\simhei.ttf").generate(target_signatur_string)
image_colors = ImageColorGenerator(my_coloring)
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
# 保存图片 并发送到手机
my_wordcloud.to_file(os.path.join(d, "wechat_cloud.png"))
itchat.send_image("wechat_cloud.png", 'filehelper') itchat.auto_login(hotReload=True)
itchat.dump_login_status() friends = itchat.get_friends(update=True)[:] # echart_pie(friends) word_cloud(friends)

运行后的效果是这样的:

windows下的显示效果真不怎么样!

用Python玩转微信(一)的更多相关文章

  1. Python玩转微信小程序

    用Python玩转微信   Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货!  这个是在 itchat上做的封装  http://itchat. ...

  2. 用Python玩转微信

    Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货!  这个是在 itchat上做的封装  http://itchat.readthedocs.io ...

  3. 10分钟教你用Python玩转微信之抓取好友个性签名制作词云

    01 前言+展示 各位小伙伴我又来啦.今天带大家玩点好玩的东西,用Python抓取我们的微信好友个性签名,然后制作词云.怎样,有趣吧~好了,下面开始干活.我知道你们还是想先看看效果的. 后台登录: 词 ...

  4. 10分钟教你用Python玩转微信之好友性别比例统计分析

    01 前言+效果展示 想必,微信对于大家来说,是再熟悉不过的了.那么,大家想不想探索一下微信上的各种奥秘呢?今天,我们一起来简单分析一下微信上的好友性别比例吧~废话不多说,开始干活. 结果如下: 02 ...

  5. 关于wxpy,使用Python玩转微信的问题

    在github上下载了,安装了之后在idle上运行,好像是说Python不能上网.新手求助.现在问题已经解决,是ssl 证书的问题,不能用最新的 复制内容到剪贴板 代码: sudo pip unins ...

  6. 用python玩微信(聊天机器人,好友信息统计)

    1.用 Python 实现微信好友性别及位置信息统计 这里使用的python3+wxpy库+Anaconda(Spyder)开发.如果你想对wxpy有更深的了解请查看:wxpy: 用 Python 玩 ...

  7. 程序员带你十天快速入门Python,玩转电脑软件开发(三)

    声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...

  8. 程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  9. 程序员带你十天快速入门Python,玩转电脑软件开发(一)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

随机推荐

  1. 【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序

    关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...

  2. Java 三大特性

    一.Java第一大特性:封装   封装:将属性私有化,提供共有方法访问私有属性,实现细节隐藏,并且程序也更加容易维护. class Dish { private final String name; ...

  3. zzuli 1812: sort 排序

    1812: sort Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 352  Solved: 216 SubmitStatusWeb Board De ...

  4. CCF-201412-3-集合竞价

    问题描述 试题编号: 201412-3 试题名称: 集合竞价 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定 ...

  5. 文件夹的创建(cmd利用)

    在windows本地上创建文件夹是无法用..结束的,我们要创建的话,需要在cmd里面进行创建输入 mkdir abc..\ 那么我们从本地看出abc..文件夹建成了怎么删除呢? 需要手动在里面建个文件 ...

  6. C#中如何使用断点操作调试程序

    Visual Studio调试器调试 当代码不能正常运行时,可以通过调试定位错误.常用的程序调试操作包括设置断点.开始.中断和停止程序的执行.单步执行程序以及使程序运行到指定的位置.下面将对这几种常用 ...

  7. Spring Cloud 前后端分离后引起的跨域访问解决方案

    背景 Spring Cloud 微服务试点改造,目前在尝试前后端分离. 前台A应用(本机8080端口),通过网管(本机8769端口)调用后台应用B(本机8082端口).应用C发布的http服务.. A ...

  8. APP端的网络优化(DNS优化,HTTP优化)

    一.使用httpDNS优化DNS解析和缓存 一般来说在App内用域名发送请求都要经过DNS解析出ip,然后再根据ip去拿对应的资源,这个过程中,如果LocalDNS中存在这个域名对应的ip,就会直接返 ...

  9. 逐步搭建Lamp环境之Linux的运行模式

    首先先来看几个概念,分别是:单用户.单任务.多用户.多任务 单用户: 是指操作系统一般只能由一个人同时进行登录 单任务: 是指操作系统只能同时处理一个任务 多用户: 是指操作系统可以允许由多个用户同时 ...

  10. 浅谈 Integer 类

    在讲解 Integer 之前,我们先看下面这段代码: public static void main(String[] args) { Integer i = 10; Integer j = 10; ...