zoukankan      html  css  js  c++  java
  • python爬取微信信息--显示性别/地域/词云(附代码)

    看到一篇有意思的博客 利用微信开放的接口itchat 可以获取登录的微信好友信息 并且利用图像工具显示分析结果 非常的有意思 记录下实现过程 并提供可执行代码

    首先要 import itchat 库 这个是微信开源的一个接口 用于登录微信并且查看账户里好友信息服务的

    2种导入方法 都可以快速下载库

    1.在cmd里可以直接 pip3 install itchat     2.在pycharm中可以依次 File-->Settings-->Project xxx项目-->Project Interpreter --> + --> 搜索里面输入itchat --> install Package

    如果还不知道怎么导库 百度搜 肯定可以解决

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    一.可以利用itchat获取好友的男女比例,好友的地域分布  上代码

    里面需要import 3个包 (itchat,pandas,matplotlib)用上面讲过的相同方法下载库

    显示效果为             

       

     1 import itchat
     2 
     3 #生成一个验证码
     4 itchat.login()
     5 itchat.auto_login(enableCmdQR=True)
     6 #获取好友信息
     7 friends=itchat.get_friends(update=True)
     8 
     9 #查看男女的比例
    10 male=1
    11 female=0
    12 other=0
    13 #friends=[0]是自己 所有我们要从[1:]
    14 for i in friends[1:]:
    15     print(i)
    16     sex =i['Sex'] #1是男性 2女性
    17     if(sex==1):
    18         male+=1
    19     elif(sex==2):
    20         female+=1
    21     else:
    22         other+=1
    23 total =len(friends[1:])
    24 print('好友总人数:',total)
    25 print('男性比例:%2f%%'%(float(male)/total*100))
    26 print('女性比例:%2f%%'%(float(female)/total*100))
    27 print('未知比例:%2f%%'%(float(other)/total*100))
    28 
    29 #绘制图形 --》统计图
    30 arr=['1']*male #男性
    31 arr1=['2']*female #女性
    32 arr2=['0']*other #未知
    33 
    34 #吧数据组合一起 数据可视化
    35 arr.extend(arr1)
    36 arr.extend(arr2)
    37 
    38 import matplotlib.pyplot as plt
    39 #将数据转化为一维数据
    40 
    41 plt.hist(arr)
    42 plt.show()
    43 #获取所有数据
    44 #昵称 ,性别,省份 ,城市,个性签名
    45 import pandas as pd
    46 
    47 data =pd.DataFrame()
    48 colums =['NickName','Sex','Province','City','Signature']
    49 for col in colums:
    50     val =[]
    51     #得到好友
    52     for r in friends[1:]:
    53         val.append(r[col])
    54     data[col] =pd.Series(val)
    55 #城市的分布
    56 #绘制柱状型
    57 #设置字体
    58 plt.rcParams['font.sans-serif']=['SimHei']
    59 plt.bar(data['Province'].value_counts().index,data['Province'].value_counts())
    60 plt.xticks(rotation='90') #图片旋转90度
    61 plt.show()
    62 #查看浙江好友分布情况
    63 gd= data[data['Province']== '浙江']['City']
    64 plt.bar(gd.value_counts().index,gd.value_counts())
    65 plt.show()

    二.可以根据获取的好友个性签名 制作词云 比如下图

     

    上代码

    由于这个用到的东西多一些 需要导入的包也 多一些 但是没关系 缺少哪个库就对应下载哪个库 下载库的方法都一样 

    说一下 需要更改的地方 

    1.第37行 alice_coloring = np.array(Image.open(os.path.join(r'C:UsersAdministratorDesktop', 'iphone.jpg'))) 

     C:UsersAdministratorDesktop改为存放图片的路径    iphone.jpg改为你自己图片的名称

    2.第62行 my_wordcloud.to_file(os.path.join('F:\', 'wechat_cloud.png')) 作用是将生成图片放入指定文件夹中 你可以更改放到你想放的路径 改完之后 63行的路径也要改  当然如果偷懒的话 也可以不改 你会发现F盘下 有你生成的文件

     1 import itchat
     2 import re
     3 
     4 # 先登录,扫二维码登录微信
     5 itchat.login()
     6 # 获取好友列表,返回的是json信息
     7 friends = itchat.get_friends(update=True)[0:]
     8 # 打印好友列表信息
     9 # print(friends)
    10 tList = []
    11 for i in friends:
    12     # 获取个性签名,替换掉span,class,emoji
    13     signature = i["Signature"].replace(" ", "").replace("span", "").replace("class", "").replace("emoji", "")
    14     # 正则匹配过滤掉emoji表情,例如emoji1f3c3等
    15     rep = re.compile("1fd.+")
    16     signature = rep.sub("", signature)
    17     tList.append(signature)
    18 
    19 # 拼接字符串
    20 text = "".join(tList)
    21 
    22 # jieba分词
    23 import jieba
    24 
    25 wordlist_jieba = jieba.cut(text, cut_all=True)
    26 wl_space_split = " ".join(wordlist_jieba)
    27 
    28 # wordcloud词云
    29 import matplotlib.pyplot as plt
    30 from wordcloud import WordCloud, ImageColorGenerator
    31 import os
    32 import numpy as np
    33 import PIL.Image as Image
    34 
    35 # d = os.path.dirname(__file__)
    36 # 找一张微信logo图来生成配色方案,微信logo图wechat.jpg路径在F:\盘下
    37 alice_coloring = np.array(Image.open(os.path.join(r'C:UsersAdministratorDesktop', 'iphone.jpg')))
    38 # 这里要选择字体存放路径,win的字体在C:/windows/Fonts中
    39 """#my_wordcloud = WordCloud().generate(wl_space_split) 默认构造函数
    40 my_wordcloud = WordCloud(
    41             background_color='white',    # 设置背景颜色
    42             mask = abel_mask,        # 设置背景图片
    43             max_words = 200,            # 设置最大显示的字数
    44             stopwords = STOPWORDS,        # 设置停用词
    45             font_path = C:/Users/Windows/fonts/simkai.ttf',  # 设置字体格式,如不设置显示不了中文
    46             max_font_size = 50,            # 设置字体最大值
    47             random_state = 30,            # 设置有多少种随机生成状态,即有多少种配色方案
    48                 scale=.5
    49                 ).generate(wl_space_split)"""
    50 my_wordcloud = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,
    51                          max_font_size=40, random_state=42,
    52                          font_path='C:/Windows/Fonts/simhei.ttf') 
    53     .generate(wl_space_split)
    54 
    55 image_colors = ImageColorGenerator(alice_coloring)
    56 plt.imshow(my_wordcloud.recolor(color_func=image_colors))
    57 plt.imshow(my_wordcloud)
    58 plt.axis("off")
    59 plt.show()
    60 
    61 # 保存图片到F:\盘下 并发送到手机里的文件传输助手(filehelper)里
    62 my_wordcloud.to_file(os.path.join('F:\', 'wechat_cloud.png'))
    63 itchat.send_image("F:\wechat_cloud.png", 'filehelper')
  • 相关阅读:
    vue.js小结
    前端js
    前端HTML页面签入微信和APP小结
    angualr引入bootstrap部分效果失效。
    .net面试问到的问题
    C#网页爬虫抓取行政区划
    mysql 更新一个字段(在他的后面添加字符串)
    关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
    动态生成GridView列
    MSDN_FieldInfo.SetValue
  • 原文地址:https://www.cnblogs.com/bob-jianfeng/p/10310991.html
Copyright © 2011-2022 走看看