用Python更加了解微信好友

开发 后端 移动开发
用了微信几年了,微信号有也不少了,但是真正了解自己的好友吗?好友最多的城市是哪个?好友男女比例是多少?好友签名都是什么?今天我们来充分了解自己的微信好友。

用了微信几年了,微信号有也不少了,但是真正了解自己的好友吗?好友最多的城市是哪个?好友男女比例是多少?好友签名都是什么?今天我们来充分了解自己的微信好友。

运行平台: Windows

Python版本: Python3.6

IDE: Sublime Text

1、准备工作

1.1 库介绍

只有登录微信才能获取到微信好友的信息,本文采用wxpy该第三方库进行微信的登录以及信息的获取。

wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。

wxpy一些常见的场景:

  • 控制路由器、智能家居等具有开放接口的玩意儿
  • 运行脚本时自动把日志发送到你的微信
  • 加群主为好友,自动拉进群中
  • 跨号或跨群转发消息
  • 自动陪人聊天
  • 逗人玩

总而言之,可用来实现各种微信个人号的自动化操作。

1.2 wxpy库安装

wxpy 支持 Python 3.4-3.6,以及 2.7 版本

将下方命令中的 “pip” 替换为 “pip3” 或 “pip2”,可确保安装到对应的 Python 版本中

从 PYPI 官方源下载安装 (在国内可能比较慢或不稳定):

  1. pip install -U wxpy 

从豆瓣 PYPI 镜像源下载安装 (推荐国内用户选用):

  1. pip install -U wxpy -i "https://pypi.doubanio.com/simple/" 

1.3 登录微信

wxpy中有一个机器人对象,机器人 Bot 对象可被理解为一个 Web 微信客户端。Bot 在初始化时便会执行登陆操作,需要手机扫描登陆。

通过机器人对象 Bot 的 chats(), friends(),groups(), mps() 方法, 可分别获取到当前机器人的 所有聊天对象、好友、群聊,以及公众号列表。

本文主要通过friends()获取到所有好友信息,然后进行数据的处理。

  1. from wxpy import * 
  2.  
  3. # 初始化机器人,扫码登陆 
  4. bot = Bot() 
  5.  
  6. # 获取所有好友 
  7. my_friends = bot.friends() 
  8. print(type(my_friends)) 

以下为输出消息:

  1. Getting uuid of QR code. 
  2. Downloading QR code. 
  3. Please scan the QR code to log in
  4. Please press confirm on your phone. 
  5. Loading the contact, this may take a little while. 
  6. <Login successfully as 王强> 
  7. <class 'wxpy.api.chats.chats.Chats'

wxpy.api.chats.chats.Chats对象是多个聊天对象的合集,可用于搜索或统计,可以搜索和统计的信息包括sex(性别)、province(省份)、city(城市)和signature(个性签名)等。

2、微信好友男女比例

2.1 数据统计

使用一个字典sex_dict来统计好友中男性和女性的数量。

  1. # 使用一个字典统计好友男性和女性的数量 
  2. sex_dict = {'male': 0, 'female': 0} 
  3.  
  4. for friend in my_friends: 
  5.     # 统计性别 
  6.     if friend.sex == 1: 
  7.         sex_dict['male'] += 1 
  8.     elif friend.sex == 2: 
  9.         sex_dict['female'] += 1 
  10.  
  11. print(sex_dict) 

以下为输出结果:

  1. {'male': 255, 'female': 104} 

2.2 数据呈现

本文采用 ECharts饼图 进行数据的呈现,打开链接http://echarts.baidu.com/echarts2/doc/example/pie1.html,可以看到如下内容:

 

用Python更加了解微信好友
1、echarts饼图原始内容

从图中可以看到左侧为数据,右侧为呈现的数据图,其他的形式的图也是这种左右结构。看一下左边的数据:

 

  1. option = { 
  2.     title : { 
  3.         text: '某站点用户访问来源'
  4.         subtext: '纯属虚构'
  5.         x:'center' 
  6.     }, 
  7.     tooltip : { 
  8.         trigger'item'
  9.         formatter: "{a} <br/>{b} : {c} ({d}%)" 
  10.     }, 
  11.     legend: { 
  12.         orient : 'vertical'
  13.         x : 'left'
  14.         data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎'
  15.     }, 
  16.     toolbox: { 
  17.         show : true
  18.         feature : { 
  19.             mark : {show: true}, 
  20.             dataView : {show: true, readOnly: false}, 
  21.             magicType : { 
  22.                 show: true,  
  23.                 type: ['pie''funnel'], 
  24.                 option: { 
  25.                     funnel: { 
  26.                         x: '25%'
  27.                         width: '50%'
  28.                         funnelAlign: 'left'
  29.                         max: 1548 
  30.                     } 
  31.                 } 
  32.             }, 
  33.             restore : {show: true}, 
  34.             saveAsImage : {show: true
  35.         } 
  36.     }, 
  37.     calculable : true
  38.     series : [ 
  39.         { 
  40.             name:'访问来源'
  41.             type:'pie'
  42.             radius : '55%'
  43.             center: ['50%''60%'], 
  44.             data:[ 
  45.                 {value:335, name:'直接访问'}, 
  46.                 {value:310, name:'邮件营销'}, 
  47.                 {value:234, name:'联盟广告'}, 
  48.                 {value:135, name:'视频广告'}, 
  49.                 {value:1548, name:'搜索引擎'
  50.             ] 
  51.         } 
  52.     ] 
  53. };   

可以看到option =后面的大括号里是JSON格式的数据,接下来分析一下各项数据:

  • title:标题
  • text:标题内容
  • subtext:子标题
  • x:标题位置
  • tooltip:提示,将鼠标放到饼状图上就可以看到提示
  • legend:图例
  • orient:方向
  • x:图例位置
  • data:图例内容
  • toolbox:工具箱,在饼状图右上方横向排列的图标
  • mark:辅助线开关
  • dataView:数据视图,点击可以查看饼状图数据
  • magicType:饼图(pie)切换和漏斗图(funnel)切换
  • restore:还原
  • saveAsImage:保存为图片
  • calculable:暂时不知道它有什么用
  • series:主要数据
  • data:呈现的数据

其它类型的图数据格式类似,后面不再详细分析。只需要修改data、legend->data、series->data即可,修改后的数据为: 

  1. option = { 
  2.     title : { 
  3.         text: '微信好友性别比例'
  4.         subtext: '真实数据'
  5.         x:'center' 
  6.     }, 
  7.     tooltip : { 
  8.         trigger'item'
  9.         formatter: "{a} <br/>{b} : {c} ({d}%)" 
  10.     }, 
  11.     legend: { 
  12.         orient : 'vertical'
  13.         x : 'left'
  14.         data:['男性','女性'
  15.     }, 
  16.     toolbox: { 
  17.         show : true
  18.         feature : { 
  19.             mark : {show: true}, 
  20.             dataView : {show: true, readOnly: false}, 
  21.             magicType : { 
  22.                 show: true,  
  23.                 type: ['pie''funnel'], 
  24.                 option: { 
  25.                     funnel: { 
  26.                         x: '25%'
  27.                         width: '50%'
  28.                         funnelAlign: 'left'
  29.                         max: 1548 
  30.                     } 
  31.                 } 
  32.             }, 
  33.             restore : {show: true}, 
  34.             saveAsImage : {show: true
  35.         } 
  36.     }, 
  37.     calculable : true
  38.     series : [ 
  39.         { 
  40.             name:'访问来源'
  41.             type:'pie'
  42.             radius : '55%'
  43.             center: ['50%''60%'], 
  44.             data:[ 
  45.                 {value:255, name:'男性'}, 
  46.                 {value:104, name:'女性'
  47.             ] 
  48.         } 
  49.     ] 
  50. };   

数据修改完成后,点击页面中绿色的刷新按钮,可以得到饼图如下(可以根据自己的喜好修改主题):

用Python更加了解微信好友
2、好友性别比例

将鼠标放到饼图上可以看到详细数据:

用Python更加了解微信好友
3、好友性别比例查看数据

3、微信好友全国分布图

3.1 数据统计

  1. # 使用一个字典统计各省好友数量 
  2. province_dict = {'北京': 0, '上海': 0, '天津': 0, '重庆': 0, 
  3.     '河北': 0, '山西': 0, '吉林': 0, '辽宁': 0, '黑龙江': 0, 
  4.     '陕西': 0, '甘肃': 0, '青海': 0, '山东': 0, '福建': 0, 
  5.     '浙江': 0, '台湾': 0, '河南': 0, '湖北': 0, '湖南': 0, 
  6.     '江西': 0, '江苏': 0, '安徽': 0, '广东': 0, '海南': 0, 
  7.     '四川': 0, '贵州': 0, '云南': 0, 
  8.     '内蒙古': 0, '新疆': 0, '宁夏': 0, '广西': 0, '西藏': 0, 
  9.     '香港': 0, '澳门': 0} 
  10.  
  11. # 统计省份 
  12. for friend in my_friends: 
  13.     if friend.province in province_dict.keys(): 
  14.         province_dict[friend.province] += 1 
  15.  
  16. # 为了方便数据的呈现,生成JSON Array格式数据 
  17. data = [] 
  18. for key, value in province_dict.items(): 
  19.     data.append({'name'key'value': value}) 
  20.  
  21. print(data) 

以下为输出结果:

  1. [{'name''北京''value': 91}, {'name''上海''value': 12}, {'name''天津''value': 15}, {'name''重庆''value': 1}, {'name''河北''value': 53}, {'name''山西''value': 2}, {'name''吉林''value': 1}, {'name''辽宁''value': 1}, {'name''黑龙江''value': 2}, {'name''陕西''value': 3}, {'name''甘肃''value': 0}, {'name''青海''value': 0}, {'name''山东''value': 7}, {'name''福建''value': 3}, {'name''浙江''value': 4}, {'name''台湾''value': 0}, {'name''河南''value': 1}, {'name''湖北''value': 4}, {'name''湖南''value': 4}, {'name''江西''value': 4}, {'name''江苏''value': 9}, {'name''安徽''value': 2}, {'name''广东''value': 63}, {'name''海南''value': 0}, {'name''四川''value': 2}, {'name''贵州''value': 0}, {'name''云南''value': 1}, {'name''内蒙古''value': 0}, {'name''新疆''value': 2}, {'name''宁夏''value': 0}, {'name''广西''value': 1}, {'name''西藏''value': 0}, {'name''香港''value': 0}, {'name''澳门''value': 0}] 

可以看出,好友最多的省份为北京。那么问题来了:为什么要把数据重组成这种格式?因为ECharts的地图需要这种格式的数据。

3.2 数据呈现

采用ECharts地图 来进行好友分布的数据呈现。打开该网址,将左侧数据修改为:

  1. option = { 
  2.     title : { 
  3.         text: '微信好友全国分布图'
  4.         subtext: '真实数据'
  5.         x:'center' 
  6.     }, 
  7.     tooltip : { 
  8.         trigger'item' 
  9.     }, 
  10.     legend: { 
  11.         orient: 'vertical'
  12.         x:'left'
  13.         data:['好友数量'
  14.     }, 
  15.     dataRange: { 
  16.         min: 0, 
  17.         max: 100, 
  18.         x: 'left'
  19.         y: 'bottom'
  20.         text:['高','低'],           // 文本,默认为数值文本 
  21.         calculable : true 
  22.     }, 
  23.     toolbox: { 
  24.         show: true
  25.         orient : 'vertical'
  26.         x: 'right'
  27.         y: 'center'
  28.         feature : { 
  29.             mark : {show: true}, 
  30.             dataView : {show: true, readOnly: false}, 
  31.             restore : {show: true}, 
  32.             saveAsImage : {show: true
  33.         } 
  34.     }, 
  35.     roamController: { 
  36.         show: true
  37.         x: 'right'
  38.         mapTypeControl: { 
  39.             'china'true 
  40.         } 
  41.     }, 
  42.     series : [ 
  43.         { 
  44.             name'好友数量'
  45.             type: 'map'
  46.             mapType: 'china'
  47.             roam: false
  48.             itemStyle:{ 
  49.                 normal:{label:{show:true}}, 
  50.                 emphasis:{label:{show:true}} 
  51.             }, 
  52.             data:[ 
  53.               {'name''北京''value': 91}, 
  54.               {'name''上海''value': 12}, 
  55.               {'name''天津''value': 15},  
  56.               {'name''重庆''value': 1},  
  57.               {'name''河北''value': 53}, 
  58.               {'name''山西''value': 2},  
  59.               {'name''吉林''value': 1}, 
  60.               {'name''辽宁''value': 1},  
  61.               {'name''黑龙江''value': 2}, 
  62.               {'name''陕西''value': 3}, 
  63.               {'name''甘肃''value': 0}, 
  64.               {'name''青海''value': 0},  
  65.               {'name''山东''value': 7}, 
  66.               {'name''福建''value': 3},  
  67.               {'name''浙江''value': 4}, 
  68.               {'name''台湾''value': 0}, 
  69.               {'name''河南''value': 1}, 
  70.               {'name''湖北''value': 4},  
  71.               {'name''湖南''value': 4}, 
  72.               {'name''江西''value': 4}, 
  73.               {'name''江苏''value': 9}, 
  74.               {'name''安徽''value': 2}, 
  75.               {'name''广东''value': 63},  
  76.               {'name''海南''value': 0}, 
  77.               {'name''四川''value': 2}, 
  78.               {'name''贵州''value': 0},  
  79.               {'name''云南''value': 1}, 
  80.               {'name''内蒙古''value': 0}, 
  81.               {'name''新疆''value': 2},  
  82.               {'name''宁夏''value': 0}, 
  83.               {'name''广西''value': 1}, 
  84.               {'name''西藏''value': 0}, 
  85.               {'name''香港''value': 0}, 
  86.               {'name''澳门''value': 0} 
  87.             ] 
  88.         } 
  89.     ] 
  90. };     

注意两点:

  • dataRange->max 根据统计数据适当调整
  • series->data 的数据格式

点击刷新按钮后,可以生成如下地图:

用Python更加了解微信好友

好友全国分布图

从图中可以看出我的好友主要分布在北京、河北和广东。

有趣的是,地图左边有一个滑块,代表地图数据的范围,我们将上边的滑块拉到最下面可以看到没有微信好友分布的省份:

用Python更加了解微信好友
5、没有微信好友的省份

按照这个思路,我们可以在地图上看到确切数量好友分布的省份,读者可以动手试试。

4、好友签名统计

4.1 数据统计

  1. def write_txt_file(path, txt): 
  2.     ''
  3.     写入txt文本 
  4.     ''
  5.     with open(path, 'a', encoding='gb18030', newline=''as f: 
  6.         f.write(txt)     
  7.  
  8. # 统计签名 
  9. for friend in my_friends: 
  10.     # 对数据进行清洗,将标点符号等对词频统计造成影响的因素剔除 
  11.     pattern = re.compile(r'[一-龥]+'
  12.     filterdata = re.findall(pattern, friend.signature) 
  13.     write_txt_file('signatures.txt'''.join(filterdata)) 

上面代码实现了对好友签名进行清洗以及保存的功能,执行完成之后会在当前目录生成signatures.txt文件。

4.2 数据呈现

数据呈现采用词频统计和词云展示,通过词频可以了解到微信好友的生活态度。

词频统计用到了 jieba、numpy、pandas、scipy、wordcloud库。如果电脑上没有这几个库,执行安装指令:

 

  1. pip install jieba 
  2. pip install pandas 
  3. pip install numpy 
  4. pip install scipy 
  5. pip install wordcloud 

4.2.1 读取txt文件

前面已经将好友签名保存到txt文件里了,现在我们将其读出:

  1. def read_txt_file(path): 
  2.     ''
  3.     读取txt文本 
  4.     ''
  5.     with open(path, 'r', encoding='gb18030', newline=''as f: 
  6.         return f.read() 

4.2.2 stop word

下面引入一个概念:stop word, 在网站里面存在大量的常用词比如:“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停止词。这些词因为使用频率过高,几乎每个网页上都存在,所以搜索引擎开发人员都将这一类词语全部忽略掉。如果我们的网站上存在大量这样的词语,那么相当于浪费了很多资源。

在百度搜索stpowords.txt进行下载,放到py文件同级目录。

  1. content = read_txt_file(txt_filename) 
  2. segment = jieba.lcut(content) 
  3. words_df=pd.DataFrame({'segment':segment}) 
  4.  
  5. stopwords=pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep=" ",names=['stopword'],encoding='utf-8'
  6. words_df=words_df[~words_df.segment.isin(stopwords.stopword)] 

4.2.3 词频统计

重头戏来了,词频统计使用numpy:

  1. import numpy 
  2.  
  3. words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size}) 
  4.     words_stat = words_stat.reset_index().sort_values(by=["计数"],ascending=False

4.2.4 词频可视化:词云

词频统计虽然出来了,可以看出排名,但是不***,接下来我们将它可视化。使用到wordcloud库,详细介绍见 github 。

  1. from scipy.misc import imread 
  2. from wordcloud import WordCloud, ImageColorGenerator 
  3.  
  4.  
  5. # 设置词云属性 
  6. color_mask = imread('background.jfif'
  7. wordcloud = WordCloud(font_path="simhei.ttf",   # 设置字体可以显示中文 
  8.                 background_color="white",       # 背景颜色 
  9.                 max_words=100,                  # 词云显示的***词数 
  10.                 mask=color_mask,                # 设置背景图片 
  11.                 max_font_size=100,              # 字体***值 
  12.                 random_state=42, 
  13.                 width=1000, height=860, margin=2,# 设置图片默认的大小,但是如果使用背景图片的话,                                                   # 那么保存的图片大小将会按照其大小保存,margin为词语边缘距离 
  14.                 ) 
  15.  
  16. # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数 
  17. word_frequence = {x[0]:x[1]for x in words_stat.head(100).values
  18. print(word_frequence) 
  19. word_frequence_dict = {} 
  20. for key in word_frequence: 
  21.     word_frequence_dict[key] = word_frequence[key
  22.  
  23. wordcloud.generate_from_frequencies(word_frequence_dict) 
  24. # 从背景图片生成颜色值   
  25. image_colors = ImageColorGenerator(color_mask)  
  26. # 重新上色 
  27. wordcloud.recolor(color_func=image_colors) 
  28. # 保存图片 
  29. wordcloud.to_file('output.png'
  30. plt.imshow(wordcloud) 
  31. plt.axis("off"
  32. plt.show() 

运行效果图如下(左图为背景图,右图为生成词云图片):

用Python更加了解微信好友
6、背景图和词云图对比

从词云图可以分析好友特点:

  • 做--------------------行动派
  • 人生、生活--------热爱生活
  • 快乐-----------------乐观
  • 选择-----------------决断
  • 专业-----------------专业
  • 爱--------------------爱

5、总结

至此,微信好友的分析工作已经完成,wxpy的功能还有很多,比如聊天、查看公众号信息等,有意的读者请自行查阅官方文档。

6、完整代码

上面的代码比较松散,下面展示的完整代码我将各功能模块封装成函数:

 

  1. #-*- coding: utf-8 -*- 
  2. import re 
  3. from wxpy import * 
  4. import jieba 
  5. import numpy 
  6. import pandas as pd 
  7. import matplotlib.pyplot as plt 
  8. from scipy.misc import imread 
  9. from wordcloud import WordCloud, ImageColorGenerator 
  10.  
  11. def write_txt_file(path, txt): 
  12.     ''
  13.     写入txt文本 
  14.     ''
  15.     with open(path, 'a', encoding='gb18030', newline=''as f: 
  16.         f.write(txt) 
  17.  
  18. def read_txt_file(path): 
  19.     ''
  20.     读取txt文本 
  21.     ''
  22.     with open(path, 'r', encoding='gb18030', newline=''as f: 
  23.         return f.read() 
  24.  
  25. def login(): 
  26.     # 初始化机器人,扫码登陆 
  27.     bot = Bot() 
  28.  
  29.     # 获取所有好友 
  30.     my_friends = bot.friends() 
  31.  
  32.     print(type(my_friends)) 
  33.     return my_friends 
  34.  
  35. def show_sex_ratio(friends): 
  36.     # 使用一个字典统计好友男性和女性的数量 
  37.     sex_dict = {'male': 0, 'female': 0} 
  38.  
  39.     for friend in friends: 
  40.         # 统计性别 
  41.         if friend.sex == 1: 
  42.             sex_dict['male'] += 1 
  43.         elif friend.sex == 2: 
  44.             sex_dict['female'] += 1 
  45.  
  46.     print(sex_dict) 
  47.  
  48. def show_area_distribution(friends): 
  49.     # 使用一个字典统计各省好友数量 
  50.     province_dict = {'北京': 0, '上海': 0, '天津': 0, '重庆': 0, 
  51.         '河北': 0, '山西': 0, '吉林': 0, '辽宁': 0, '黑龙江': 0, 
  52.         '陕西': 0, '甘肃': 0, '青海': 0, '山东': 0, '福建': 0, 
  53.         '浙江': 0, '台湾': 0, '河南': 0, '湖北': 0, '湖南': 0, 
  54.         '江西': 0, '江苏': 0, '安徽': 0, '广东': 0, '海南': 0, 
  55.         '四川': 0, '贵州': 0, '云南': 0, 
  56.         '内蒙古': 0, '新疆': 0, '宁夏': 0, '广西': 0, '西藏': 0, 
  57.         '香港': 0, '澳门': 0} 
  58.  
  59.     # 统计省份 
  60.     for friend in friends: 
  61.         if friend.province in province_dict.keys(): 
  62.             province_dict[friend.province] += 1 
  63.  
  64.     # 为了方便数据的呈现,生成JSON Array格式数据 
  65.     data = [] 
  66.     for key, value in province_dict.items(): 
  67.         data.append({'name'key'value': value}) 
  68.  
  69.     print(data) 
  70.  
  71. def show_signature(friends): 
  72.     # 统计签名 
  73.     for friend in friends: 
  74.         # 对数据进行清洗,将标点符号等对词频统计造成影响的因素剔除 
  75.         pattern = re.compile(r'[一-龥]+'
  76.         filterdata = re.findall(pattern, friend.signature) 
  77.         write_txt_file('signatures.txt'''.join(filterdata)) 
  78.  
  79.     # 读取文件 
  80.     content = read_txt_file('signatures.txt'
  81.     segment = jieba.lcut(content) 
  82.     words_df = pd.DataFrame({'segment':segment}) 
  83.  
  84.     # 读取stopwords 
  85.     stopwords = pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep=" ",names=['stopword'],encoding='utf-8'
  86.     words_df = words_df[~words_df.segment.isin(stopwords.stopword)] 
  87.     print(words_df) 
  88.  
  89.     words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size}) 
  90.     words_stat = words_stat.reset_index().sort_values(by=["计数"],ascending=False
  91.  
  92.     # 设置词云属性 
  93.     color_mask = imread('background.jfif'
  94.     wordcloud = WordCloud(font_path="simhei.ttf",   # 设置字体可以显示中文 
  95.                     background_color="white",       # 背景颜色 
  96.                     max_words=100,                  # 词云显示的***词数 
  97.                     mask=color_mask,                # 设置背景图片 
  98.                     max_font_size=100,              # 字体***值 
  99.                     random_state=42, 
  100.                     width=1000, height=860, margin=2,# 设置图片默认的大小,但是如果使用背景图片的话,                                                   # 那么保存的图片大小将会按照其大小保存,margin为词语边缘距离 
  101.                     ) 
  102.  
  103.     # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数 
  104.     word_frequence = {x[0]:x[1]for x in words_stat.head(100).values
  105.     print(word_frequence) 
  106.     word_frequence_dict = {} 
  107.     for key in word_frequence: 
  108.         word_frequence_dict[key] = word_frequence[key
  109.  
  110.     wordcloud.generate_from_frequencies(word_frequence_dict) 
  111.     # 从背景图片生成颜色值   
  112.     image_colors = ImageColorGenerator(color_mask)  
  113.     # 重新上色 
  114.     wordcloud.recolor(color_func=image_colors) 
  115.     # 保存图片 
  116.     wordcloud.to_file('output.png'
  117.     plt.imshow(wordcloud) 
  118.     plt.axis("off"
  119.     plt.show() 
  120.  
  121. def main(): 
  122.     friends = login() 
  123.     show_sex_ratio(friends) 
  124.     show_area_distribution(friends) 
  125.     show_signature(friends) 
  126.  
  127. if __name__ == '__main__'
  128.     main() 

作者:王强,一个Python狂热追随者。

责任编辑:未丽燕 来源: 知乎专栏
相关推荐

2021-12-14 15:20:37

Python微信代码

2022-08-17 11:20:23

Python微信

2021-01-22 13:09:01

微信微信8.0移动应用

2021-06-30 23:38:56

Python微信好友

2018-05-16 09:10:10

Python爬虫微信好友

2018-02-26 08:44:35

Python微信数据分析

2018-05-03 18:19:18

python爬虫微信好友

2021-04-25 14:59:14

微信单向好友检测腾讯

2013-04-09 23:52:29

微信公众平台技巧

2018-06-19 08:02:00

统计程序微信

2013-07-08 14:42:11

2021-08-22 09:16:23

微信好友移动应用

2020-04-13 17:26:42

微信Bug修复

2019-10-23 15:16:07

微信手机号转账

2021-04-27 14:59:13

微信一键冻结手机

2021-04-16 11:27:16

Python表情微信

2017-07-12 10:25:17

Python微信itchat 包

2021-02-01 13:35:28

微信Python技巧

2022-01-17 19:28:21

微信批量删除移动应用

2012-06-20 16:13:59

街旁
点赞
收藏

51CTO技术栈公众号