前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬取的微信好友信息里我看到了自律 | CSDN博文精选

Python爬取的微信好友信息里我看到了自律 | CSDN博文精选

作者头像
AI科技大本营
发布2019-11-13 20:53:16
3490
发布2019-11-13 20:53:16
举报

作者 | 吴小鹏

来源 | 数据札记倌(ID:Data_Groom)

"stay hungry, stay foolish"

"不舍爱与自由"

"自律"

爬取大家的签名后发现大家对生活都是积极向上的,希望每个人都能成为更好的自己

沉迷于造轮子。。。无法自拔

简述

微信是我们每天都会使用的社交工具,不同的人群会有不一样的朋友圈。

可能是微信不到百人的彭磊

就是这个小眼睛男人

也可能是直逼好友上限的大佬

吓得我赶紧看了一下我的好友列表,迅速拉到最底端,算了一下还有四千多个位置。

没有体验过这种优秀的烦恼,所以我去搜了一下微信好友上限是一种什么体验:

大概是这样的吧!

或者是这样的?

接下来我会使用「itchat」(开源的微信个人接口)来获取一些公开的好友信息,使用itchat.get_friends(),我们可以获取微信好友头像、性别、省份、城市、年龄等具体信息。

爬取这些信息后做一些统计分布的分析。

好友头像

我们先拉取好友头像试一下,「itchat」里的get_head_img可以获取每个好友的头像:

代码语言:javascript
复制
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("photo/" + str(count) + ".jpg", "wb")
        imgFile.write(img)
        imgFile.close()

photo文件夹用于保存头像图片,遍历好友列表,根据下标命名头像,到这里可以看到文件夹里已经保存了所有好友的头像。

头像信息比较隐私,就不公布啦~

性别分布

当我们使用「itchat」的get_friends()函数可以获取很多好友信息,包括性别,所以这里只需要将获取到的好友性别信息提取出来制图就可以:

代码语言:javascript
复制
def analysisSex():
    itchat.login()
    friends = itchat.get_friends()
    sex_count = dict()
    for f in friends:
        if f["Sex"] == 1:  # man
            sex_count["man"] = sex_count.get("man", 0) + 1
        elif f["Sex"] == 2:  # women
            sex_count["women"] = sex_count.get("women", 0) + 1
        else:  # unknown
            sex_count["unknown"] = sex_count.get("unknown", 0) + 1
    # 柱状图展示
    for i, key in enumerate(sex_count):
        plt.bar(key, sex_count[key])
    plt.savefig("analysisSex.png") #保存图片
    plt.ion()
    plt.close()

结果如下:

个性签名

在获取的好友信息中Signature字段对应着好友的签名,我们直接获取这部分信息,然后保存下来,处理过表情等特殊字符,然后制作词云图。

如何利用Python生成词云图

代码语言:javascript
复制
def AnalysisSignature():
    itchat.login()
    friends = itchat.get_friends(update=True)
    file = open('AnalysisSignature.txt', 'a', encoding='utf-8')
    for f in friends:
        signature = f["Signature"].strip().replace("emoji", "").replace("span", "").replace("class", "")
        # 正则匹配
        rec = re.compile("1f\d+\w*|[<>/=]")
        signature = rec.sub("", signature)
        file.write(signature + "\n")

"stay hungry, stay foolish"

"不舍爱与自由"

大家对生活都是积极向上的,希望每个人都能成为更好的自己!

地区分布

为了统计好友的地区分布,所以要用到好友信息的province字段,直接对province进行统计,然后可视化出来得到。

代码语言:javascript
复制
# 省份分析
def analysisProvince():
    friends_info = get_friends_info()
    df = pd.DataFrame(friends_info)
    province_count = df.groupby('province', as_index=True)['province'].count().sort_values()
    temp = list(map(lambda x: x if x != '' else '未知', list(province_count.index)))
    # 画图
    page = Page()
    style = Style(width=1100, height=600)
    style_middle = Style(width=900, height=500)
    attr, value = temp, list(province_count)
    chart1 = Map('好友分布(中国地图)', **style.init_style)
    chart1.add('', attr, value, is_label_show=True, is_visualmap=True, visual_text_color='#000')
    page.add(chart1)
    chart2 = Bar('好友分布柱状图', **style_middle.init_style)
    chart2.add('', attr, value, is_stack=True, is_convert=True,
               label_pos='inside', is_legend_show=True, is_label_show=True)
    page.add(chart2)
    page.render('analysisProvince.html')

比较明显的一个点是,我们的好友大多来自我们生活过的地方,安徽和上海这两个地区好友数量都明显高于其他省份。

号主户籍安徽,利用城市信息看一下我的朋友都在哪里。

从下面的好友数量来看,号主明显是个安庆人。

(*本文为AI科技大本营转载文章,转载请联系作者)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云图数据可视化
腾讯云图数据可视化(Tencent Cloud Visualization) 是一站式数据可视化展示平台,旨在帮助用户快速通过可视化图表展示大量数据,低门槛快速打造出专业大屏数据展示。精心预设多种行业模板,极致展示数据魅力。采用拖拽式自由布局,全图形化编辑,快速可视化制作。腾讯云图数据可视化支持多种数据来源配置,支持数据实时同步更新,同时基于 Web 页面渲染,可灵活投屏多种屏幕终端。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档