前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你的微信朋友圈到底长什么样?

你的微信朋友圈到底长什么样?

作者头像
数据森麟
发布2019-09-27 15:41:46
6950
发布2019-09-27 15:41:46
举报
文章被收录于专栏:数据森麟

作者 | 张大炮

来源 | 1024程序开发者社区

本文转载自毛利学Python

现在微信是个人生活的重要部分之一,也是一种常用的中文社交网络应用程序。itchat是微信的开源API,当你掌握了Python的使用技巧,就可以轻松看到自己朋友圈到底是什么样子:

这是笔者所有微信好友的头像拼图。下面分三部分介绍具体实现方法。

/1/模拟登陆与省份信息获取

调用itchat库中函数login(),可以直接生成一个二维码,这个二维码其实就是平时登陆web微信时候的二维码,你用手机微信扫这个二维码后,程序会模拟成你登陆进微信,进而对微信进行一系列操作。对应代码:

代码语言:javascript
复制
 # False 每次登陆需要扫码  True可自动登录
 itchat.auto_login(False)

定义get_province()函数获取好友所在省份信息。

代码语言:javascript
复制
def friends_province():
    # 获取好友省份
    province= get_data("Province")  
    province_distribution = {}    
    for item in province:        
        if bool(re.search('[a-z]',item)):            
            continue
        elif not province_distribution.__contains__(item):
            province_distribution[item] = 1
        else:
            province_distribution[item] += 1
    #将省份名为空的删除
    province_distribution.pop('')    
    province_keys=province_distribution.keys()
    province_values=province_distribution.values()    
return province_keys,province_values

通过pyechart的map,bar函数对好友省份数据进行绘图,结果如下:

通过上图可直观看出好友的位置分布。

/2/性别信息的获取与可视化

定义get_sex()函数进行性别数据爬取和绘图。

代码语言:javascript
复制
def get_sex():
    my_friends = itchat.get_friends(update=True)[0:]
    sex = {"male": 0, "female": 0, "other": 0}    
    for item in my_friends[1:]:
        s = item["Sex"]
        if s == 1:
            sex["male"] += 1
        elif s == 2:
            sex["female"] += 1
        else:
            sex["other"] += 1
    total = len(my_friends[1:])
    attr = list(sex.keys())
    v1 = list(sex.values())
    pie = Pie("好友性别比例")
    pie.add("", attr, v1, v1, is_label_show=True)
    pie.render(path="sex_html/sex.html")

通过pie函数画出饼状图(男女比例确实比较尬),其中other是未标注的好友:

/3/好友签名信息和绘制云图

定义friend_signature函数,获取好友个性签名,对于签名中有emoji表情的进行处理。

代码语言:javascript
复制
def friends_signature():
    signature = get_data("Signature")
    wash_signature=[]
    for item in signature:
        #去除emoji表情等非文字
        if "emoji" in item:      
              continue
        rep = re.compile("1f\d+\w*|[<>/=【】『』♂ω]")
        item=rep.sub("", item)
        wash_signature.append(item)
    words="".join(wash_signature)
    wordlist = jieba.cut(words, cut_all=True)
    word_space_split = " ".join(wordlist)
    global NickName
    global Sex    
    coloring = np.array(Image.open("standard/boy.jpg"))    
    my_wordcloud = WordCloud(background_color="white", max_words=800,
                             mask=coloring, max_font_size=120, random_state=30, scale=2,font_path="fonts/simkai.ttf").generate(word_space_split)
    image_colors = ImageColorGenerator(coloring)
    plt.imshow(my_wordcloud.recolor(color_func=image_colors))
    plt.imshow(my_wordcloud)
    plt.axis("off")
    plt.show()    # 保存图片
    my_wordcloud.to_file('Signature/signature.png')

通过jieba函数对数据进行分词,并用Wordcloud画图,此处需要一个模板图,可根据个人喜好进行设置。

/4/头像获取与拼接

定义get_img()函数获取好友图像。

代码语言:javascript
复制
def get_img():
    os.chdir('F:\Python_code\Web_Spider\wechat\img')
    for friend in itchat.get_friends(update=True)[0:]:        
        print(friend['NickName'] + "(" + friend['RemarkName'] + ")")
        img = itchat.get_head_img(userName=friend["UserName"])
        path = friend['NickName'] + "(" + friend['RemarkName'] + ").jpg"
        try:
            with open(path, 'wb') as f:
                f.write(img)
        except Exception as e:
            print(repr(e))

运行程序,将数据存储于文件夹中,通过图像拼接,将好友图像拼接于一张图片上。

代码语言:javascript
复制
NewImage = Image.new('RGB', (128*line,128*line))
x = y = 0for item in pathList:
    try:
        img = Image.open(item)        
        x += 1
    except IOError:
        print("第%d行,%d列文件读取失败!IOError:%s" % (y,x,item))
        x -= 1
    if x == line:
        x = 0
        y += 1
    if (x+line*y) == line*line:
        breakNewImage.save("final.jpg")

最终结果为文章开头所示。

/5/开发环境

  • 版本:python3.5.2
  • 编程软件:pycharm
  • pip install pyecharts
  • pip install itchat
  • pip install PIL.Image
  • pip install jieba
  • pip install wordcloud

公众号中回复“朋友圈”,获取代码链接。

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

本文分享自 数据森麟 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档