资讯专栏INFORMATION COLUMN

python itchat 爬取微信好友信息

huaixiaoz / 3008人阅读

摘要:原文链接一个开源的微信个人接口,今天我们就用爬取微信好友信息,无图言虚空三张图分别是微信好友头像拼接图性别统计图个性签名统计图微信好友头像拼接图性别统计图个性签名统计图安装主要用到的方法微信扫描二维码登录返回完整的好友列表,每个好友为一个字

原文链接:https://mp.weixin.qq.com/s/4EXgR4GkriTnAzVxluJxmg

「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚空
三张图分别是「微信好友头像拼接图」、「性别统计图」、「个性签名统计图」

「微信好友头像拼接图」

「性别统计图」

「个性签名统计图」

安装
pip3 install itchat

主要用到的方法:
itchat.login() 微信扫描二维码登录
itchat.get_friends() 返回完整的好友列表,每个好友为一个字典, 其中第一项为本人的账号信息,传入update=True, 将更新好友列表并返回, get_friends(update=True)
itchat.get_head_img(userName="") 根据userName获取好友头像

微信好友头像拼接图

获取好友信息,get_head_img拿到每个好友的头像,保存文件,将头像缩小拼接至一张大图。
先获取好友头像:

def headImg():
    itchat.login()
    friends = itchat.get_friends(update=True)
    # itchat.get_head_img() 获取到头像二进制,并写入文件,保存每张头像
    for count, f in enumerate(friends):
        # 根据userName获取头像
        img = itchat.get_head_img(userName=f["UserName"])
        imgFile = open("img/" + str(count) + ".jpg", "wb")
        imgFile.write(img)
        imgFile.close()

这里需要提前在同目录下新建了文件夹img,否则会报No such file or directory错误,img用于保存头像图片,遍历好友列表,根据下标count命名头像,到这里可以看到文件夹里已经保存了所有好友的头像。

接下来就是对头像进行拼接

遍历文件夹的图片,random.shuffle(imgs)将图片顺序打乱

用640*640的大图来平均分每一张头像,计算出每张正方形小图的长宽,压缩头像,拼接图片,一行排满,换行拼接,好友头像多的话,可以适当增加大图的面积,具体代码如下:

def createImg():
    x = 0
    y = 0
    imgs = os.listdir("img")
    random.shuffle(imgs)
    # 创建640*640的图片用于填充各小图片
    newImg = Image.new("RGBA", (640, 640))
    # 以640*640来拼接图片,math.sqrt()开平方根计算每张小图片的宽高,
    width = int(math.sqrt(640 * 640 / len(imgs)))
    # 每行图片数
    numLine = int(640 / width)

    for i in imgs:
        img = Image.open("img/" + i)
        # 缩小图片
        img = img.resize((width, width), Image.ANTIALIAS)
        # 拼接图片,一行排满,换行拼接
        newImg.paste(img, (x * width, y * width))
        x += 1
        if x >= numLine:
            x = 0
            y += 1

    newImg.save("all.png")

好友头像图成型,头像是随机打乱拼接的

性别统计图

同样itchat.login()登录获取好友信息,根据Sex字段判断性别,1 代表男性(man),2 代表女性(women),3 未知(unknown)

def getSex():
    itchat.login()
    friends = itchat.get_friends(update=True)
    sex = dict()
    for f in friends:
        if f["Sex"] == 1: #男
            sex["man"] = sex.get("man", 0) + 1
        elif f["Sex"] == 2: #女
            sex["women"] = sex.get("women", 0) + 1
        else: #未知
            sex["unknown"] = sex.get("unknown", 0) + 1
    # 柱状图展示
    for i, key in enumerate(sex):
        plt.bar(key, sex[key])
    plt.show()

性别统计柱状图

个性签名统计图

获取好友信息,Signature字段是好友的签名,将个性签名保存到.txt文件,部分签名里有表情之类的会变成emoji 类的词,将这些还有特殊符号的替换掉。

def getSignature():
    itchat.login()
    friends = itchat.get_friends(update=True)
    file = open("sign.txt", "a", encoding="utf-8")
    for f in friends:
        signature = f["Signature"].strip().replace("emoji", "").replace("span", "").replace("class", "")
        # 正则匹配
        rec = re.compile("1fd+w*|[<>/=]")
        signature = rec.sub("", signature)
        file.write(signature + "
")

sign.txt文件里写入了所有好友的个性签名,使用wordcloud包生成词云图,pip install wordcloud
同样可以采用jieba分词生成词图,不使用分词的话就是句子展示,使用jieba分词的话可以适当把max_font_size属性调大,比如100。
需要注意的是运行不要在虚拟环境下,deactivate 退出虚拟环境再跑,详细代码如下:

# 生成词云图
def create_word_cloud(filename):
    # 读取文件内容
    text = open("{}.txt".format(filename), encoding="utf-8").read()

    # 注释部分采用结巴分词
    # wordlist = jieba.cut(text, cut_all=True)
    # wl = " ".join(wordlist)

    # 设置词云
    wc = WordCloud(
        # 设置背景颜色
        background_color="white",
        # 设置最大显示的词云数
        max_words=2000,
        # 这种字体都在电脑字体中,window在C:WindowsFonts下,mac下可选/System/Library/Fonts/PingFang.ttc 字体
        font_path="C:WindowsFontssimfang.ttf",
        height=500,
        width=500,
        # 设置字体最大值
        max_font_size=60,
        # 设置有多少种随机生成状态,即有多少种配色方案
        random_state=30,
    )

    myword = wc.generate(text)  # 生成词云 如果用结巴分词的话,使用wl 取代 text, 生成词云图
    # 展示词云图
    plt.imshow(myword)
    plt.axis("off")
    plt.show()
    wc.to_file("signature.png")  # 把词云保存下

句子图

使用jieba分词产生的词云图

看来,「努力」 「生活」 还是很重要的

itchat 除了以上的信息,还有省市区等等信息都可以抓取,另外还可以实现机器人自动聊天等功能,这里就不一一概述了。

最后附上github地址:https://github.com/taixiang/itchat_wechat

欢迎关注我的博客:https://blog.manjiexiang.cn/
欢迎关注微信号:春风十里不如认识你

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41815.html

相关文章

  • 小程序使用之自定义组件

    摘要:今天要介绍的是小程序的自定义组件,类似的在做开发的过程中会用到自定义,封装成通用的组件可以在不同页面里重复使用可以将复杂的页面拆分成多个低耦合的模块,便于代码的维护。 文章链接:https://mp.weixin.qq.com/s/3xPnDwLsg7pHc_xAmS1DUQ 在前一篇文章 小程序使用之WXS中,介绍了关于 wxs 的使用,通过wxs处理数据再渲染到view层,可以简...

    Ververica 评论0 收藏0
  • 小程序使用之自定义组件

    摘要:今天要介绍的是小程序的自定义组件,类似的在做开发的过程中会用到自定义,封装成通用的组件可以在不同页面里重复使用可以将复杂的页面拆分成多个低耦合的模块,便于代码的维护。 文章链接:https://mp.weixin.qq.com/s/3xPnDwLsg7pHc_xAmS1DUQ 在前一篇文章 小程序使用之WXS中,介绍了关于 wxs 的使用,通过wxs处理数据再渲染到view层,可以简...

    ztyzz 评论0 收藏0
  • python 生成18年写过的博客词云

    摘要:处理文件最终得到的字符串得到所有的文本之后,使用结巴分词,处理成单个的词语。 文章链接:https://mp.weixin.qq.com/s/NmJjTEADV6zKdT--2DXq9Q 回看18年,最有成就的就是有了自己的 博客网站,坚持记录,写文章,累计写了36篇了,从一开始的难以下手,到现在成为一种习惯,虽然每次写都会一字一句斟酌,但是每次看到产出,内心还是开心的,享受这样的过...

    xi4oh4o 评论0 收藏0
  • python 让挑选家具更方便

    摘要:也浏览过家具城的官网,本着在一定的预算范围之类挑选最合适的,作为一个程序猿,一颗不安分的心,决定自己爬虫下网站,列出个表格,也方便给父母辈们查看,顺带再练习下爬虫的。根据行列坐标将数据写入单元格。设置列宽,指定开始列位置,指定结束列位置。 原文链接:https://mp.weixin.qq.com/s/tQ... 家中想置办些家具,听朋友介绍说苏州蠡(li第二声)口的家具比较出名,因...

    ermaoL 评论0 收藏0
  • 手把手教你扩展个人微信号(2)(微信控制器、群发助手、好友删除检测)

    摘要:本文为教程的第二部分,主要以微信控制器群发助手好友删除检测为例演示如何调用微信。教程流程简介这一系列教程从如何分析微信协议开始,第一部分教你如何从零开始获取并模拟扩展个人微信号所需要的协议。 现在的日常生活已经离不开微信,本文将会抛砖引玉演示如何使用Python调用微信API做一些有意思的东西。 看完这一系列教程,你就能从头开始实现自己关于微信的想法。 本文为教程的第二部分,主要以微信...

    LeanCloud 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<