丰盛详尽

代码放在这里:wzyonggege/python-wechat-itchat

词云那里能够换来小黄种人图片

必发bifa88手机客服端 1


0. itchat

近些年研讨了一部分微信的玩法,大家能够透过网页版的微信微信网页版,扫码登录后去抓包爬取音信,还足以post去发送音信。

下一场发现了itchat其1开源项目,作者是必发bifa88手机客服端,@LittleCoder,已经把微信的接口完成了,大大的方便了大家对微信的开掘,以下的功用也透过itchat来兑现。

安装itchat这个库

pip install itchat

先来段简单的试用,达成微信的登录,运转上面代码会变卦叁个2维码,扫码之后手提式有线电话机端确认登录,就会发送一条新闻给‘filehelper’,那么些filehelper固然微信上的文件传输帮手。

import itchat

# 登录
itchat.login()
# 发送消息
itchat.send(u'你好', 'filehelper')

除了登录和发送音信大家仍是能够那样来玩,往下走~

壹. 微信好友男女比例

想总计下团结微信里好友的性别比例,当然也是很简短,先获得好友列表,总计列表里性别计数

import itchat

# 先登录
itchat.login()

# 获取好友列表
friends = itchat.get_friends(update=True)[0:]

# 初始化计数器,有男有女,当然,有些人是不填的
male = female = other = 0

# 遍历这个列表,列表里第一位是自己,所以从"自己"之后开始计算
# 1表示男性,2女性
for i in friends[1:]:
    sex = i["Sex"]
    if sex == 1:
        male += 1
    elif sex == 2:
        female += 1
    else:
        other += 1

# 总数算上,好计算比例啊~
total = len(friends[1:])

# 好了,打印结果
print u"男性好友:%.2f%%" % (float(male) / total * 100)
print u"女性好友:%.2f%%" % (float(female) / total * 100)
print u"其他:%.2f%%" % (float(other) / total * 100)

美观看结果:

必发bifa88手机客服端 2

(好啊,暴光了本身男性朋友较多的实质~~)

看似不够直观,有趣味的朋友能够拉长可视化的显得,笔者那边用基于python的Echarts(有时机再细讲) 
先安装了

pip install echarts-python

体现比例一般采用百分比圆饼表吧

# 使用echarts,加上这段
from echarts import Echart, Legend, Pie

chart = Echart(u'%s的微信好友性别比例' % (friends[0]['NickName']), 'from WeChat')
chart.use(Pie('WeChat',
              [{'value': male, 'name': u'男性 %.2f%%' % (float(male) / total * 100)},
               {'value': female, 'name': u'女性 %.2f%%' % (float(female) / total * 100)},
               {'value': other, 'name': u'其他 %.2f%%' % (float(other) / total * 100)}],
              radius=["50%", "70%"]))
chart.use(Legend(["male", "female", "other"]))
del chart.json["xAxis"]
del chart.json["yAxis"]
chart.plot()

登登登登~

必发bifa88手机客服端 3

二. 密友本性签名词云

收获好友列表的时候,重临的json新闻中还看到了有本性签名的消息,脑洞1开,把大家的性格签名都抓下来,看看高频词语,还做了个词云。

# coding:utf-8
import itchat

# 先登录
itchat.login()

# 获取好友列表
friends = itchat.get_friends(update=True)[0:]
for i in friends:
    # 获取个性签名
    signature = i["Signature"]
print signature

先全体抓取下来 
打字与印刷今后您会发觉,有雅量的span,class,emoji,emoji1f三c三等的字段,因为天性签名中运用了表情符号,这几个字段都以要过滤掉的,写个正则和replace方法过滤掉

for i in friends:
# 获取个性签名
    signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")
# 正则匹配过滤掉emoji表情,例如emoji1f3c3等
    rep = re.compile("1f\d.+")
    signature = rep.sub("", signature)
    print signature

接来下用jieba分词,然后创建成词云,首先要安装jieba和wordcloud库

pip install jieba
pip install wordcloud

代码

# coding:utf-8
import itchat
import re

itchat.login()
friends = itchat.get_friends(update=True)[0:]
tList = []
for i in friends:
    signature = i["Signature"].replace(" ", "").replace("span", "").replace("class", "").replace("emoji", "")
    rep = re.compile("1f\d.+")
    signature = rep.sub("", signature)
    tList.append(signature)

# 拼接字符串
text = "".join(tList)

# jieba分词
import jieba
wordlist_jieba = jieba.cut(text, cut_all=True)
wl_space_split = " ".join(wordlist_jieba)

# wordcloud词云
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import PIL.Image as Image

# 这里要选择字体存放路径,这里是Mac的,win的字体在windows/Fonts中
my_wordcloud = WordCloud(background_color="white", max_words=2000, 
                         max_font_size=40, random_state=42,
                         font_path='/Users/sebastian/Library/Fonts/Arial Unicode.ttf').generate(wl_space_split)

plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()

运作代码

必发bifa88手机客服端 4这。。好像有点丑,依据wordcloud用法,小编得以找一张图来扭转配色方案,作者那里找了一张微信的logo

必发bifa88手机客服端 5

修改一下代码

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


d = os.path.dirname(__file__)
alice_coloring = np.array(Image.open(os.path.join(d, "wechat.jpg")))
my_wordcloud = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,
                         max_font_size=40, random_state=42,
                         font_path='/Users/sebastian/Library/Fonts/Arial Unicode.ttf')\
    .generate(wl_space_split)

image_colors = ImageColorGenerator(alice_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')

必发bifa88手机客服端 6

 

嗯~好像还能,那是Mac下转移的,附三个win十下转移的

必发bifa88手机客服端 7

三. 微信自动回复

跟着来落到实处四个接近qq上的自动苏醒,原理正是吸收接纳到音讯,就发新闻回去,同时发一条给文件帮手,就能够在文书帮手中联合查看消息。

代码很简短,来看看

#coding=utf8
import itchat

# 自动回复
# 封装好的装饰器,当接收到的消息是Text,即文字消息
@itchat.msg_register('Text')
def text_reply(msg):
    # 当消息不是由自己发出的时候
    if not msg['FromUserName'] == myUserName:
        # 发送一条提示给文件助手
        itchat.send_msg(u"[%s]收到好友@%s 的信息:%s\n" %
                        (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime'])),
                         msg['User']['NickName'],
                         msg['Text']), 'filehelper')
        # 回复给好友
        return u'[自动回复]您好,我现在有事不在,一会再和您联系。\n已经收到您的的信息:%s\n' % (msg['Text'])

if __name__ == '__main__':
    itchat.auto_login()

    # 获取自己的UserName
    myUserName = itchat.get_friends(update=True)[0]["UserName"]
    itchat.run()

运行后会保持登录景况,开启自动还原格局,手提式有线电话机上查看:

必发bifa88手机客服端 8必发bifa88手机客服端 9当然,除了文字Text音讯,还能收到图片(表情包算图片),语音,名片,地理地点,分享和档次为Note的消息(就是有人提示类的消息,例如撤回新闻),把装饰器写成上边情势即可接受,大家能够尝试

@itchat.msg_register(['Map', 'Card', 'Note', 'Sharing', 'Picture'])

读书进度中相遇哪些难点要么想获得学习财富的话,欢迎加入学习调换群
62606207八,大家1块学Python!

相关文章