如何用Python玩转微信

python

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) - 1male = female = other = 0for 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()

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

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

相关推荐:《Python相关教程》

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 osimport numpy as np

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

然后提供一张图片。

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

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

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import itchatimport re

import jiebadef 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:WindowsFontssimhei.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玩转微信 的全部内容, 来源链接: utcz.com/z/522585.html

回到顶部