|
|
|
|
移动端

用Python爬了自己的微信好友,原来他们是这样的人……

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

作者:C与Python实战来源:大数据|2018-05-16 09:10

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

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

01 准备工作

运行平台:Windows

Python版本:Python3.6

IDE:Sublime Text

1. 库介绍

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

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

wxpy一些常见的场景:

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

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

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/" 

3. 登录微信

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

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

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

  1. from wxpy import *  
  2. # 初始化机器人,扫码登陆  
  3. bot = Bot()  
  4. # 获取所有好友  
  5. my_friends = bot.friends()  
  6. 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(个性签名)等。

02 微信好友男女比例

1. 数据统计

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

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

以下为输出结果:

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

2. 数据呈现

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

▲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. };       

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

▲好友性别比例

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

▲好友性别比例查看数据

03 微信好友全国分布图

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的地图需要这种格式的数据。

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.  
  43.     series : [  
  44.         { 
  45.  
  46.             name'好友数量' 
  47.             type: 'map' 
  48.             mapType: 'china' 
  49.             roam: false 
  50.             itemStyle:{  
  51.                 normal:{label:{show:true}},  
  52.                 emphasis:{label:{show:true}}  
  53.             },  
  54.             data:[  
  55.               {'name''北京''value': 91},  
  56.               {'name''上海''value': 12},  
  57.               {'name''天津''value': 15},   
  58.               {'name''重庆''value': 1},   
  59.               {'name''河北''value': 53},  
  60.               {'name''山西''value': 2},   
  61.               {'name''吉林''value': 1},  
  62.               {'name''辽宁''value': 1},   
  63.               {'name''黑龙江''value': 2}, 
  64.               {'name''陕西''value': 3},  
  65.               {'name''甘肃''value': 0},  
  66.               {'name''青海''value': 0},   
  67.               {'name''山东''value': 7},  
  68.               {'name''福建''value': 3},   
  69.               {'name''浙江''value': 4},  
  70.               {'name''台湾''value': 0},  
  71.               {'name''河南''value': 1},  
  72.               {'name''湖北''value': 4},   
  73.               {'name''湖南''value': 4},  
  74.               {'name''江西''value': 4},  
  75.               {'name''江苏''value': 9},  
  76.               {'name''安徽''value': 2},  
  77.               {'name''广东''value': 63},   
  78.               {'name''海南''value': 0},  
  79.               {'name''四川''value': 2},  
  80.               {'name''贵州''value': 0},   
  81.               {'name''云南''value': 1},  
  82.               {'name''内蒙古''value': 0},  
  83.               {'name''新疆''value': 2},   
  84.               {'name''宁夏''value': 0},  
  85.               {'name''广西''value': 1}, 
  86.               {'name''西藏''value': 0},  
  87.               {'name''香港''value': 0},  
  88.               {'name''澳门''value': 0}  
  89.             ]  
  90.         }  
  91.     ]  
  92. };                     

注意两点:

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

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

▲好友全国分布图

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

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

▲没有微信好友的省份

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

04 好友签名统计

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文件。

2. 数据呈现

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

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

  • pip install jieba  
  • pip install pandas  
  • pip install numpy  
  • pip install scipy  
  • pip install wordcloud  

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() 

2.2 stop word

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

在百度搜索stopwords.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)] 

2.3 词频统计

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

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

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.  
  17. # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数  
  18. word_frequence = {x[0]:x[1]for x in words_stat.head(100).values 
  19. print(word_frequence)  
  20. word_frequence_dict = {}  
  21. for key in word_frequence:  
  22.     word_frequence_dict[key] = word_frequence[key 
  23.  
  24. wordcloud.generate_from_frequencies(word_frequence_dict)  
  25. # 从背景图片生成颜色值    
  26. image_colors = ImageColorGenerator(color_mask) 
  27. # 重新上色  
  28. wordcloud.recolor(color_func=image_colors)  
  29. # 保存图片  
  30. wordcloud.to_file('output.png' 
  31. plt.imshow(wordcloud)  
  32. plt.axis("off" 
  33. plt.show() 

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

▲背景图和词云图对比

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

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

05 总结

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

06 完整代码

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

  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.     # 读取文件  
  81.     content = read_txt_file('signatures.txt' 
  82.     segment = jieba.lcut(content)  
  83.     words_df = pd.DataFrame({'segment':segment}) 
  84.  
  85.  
  86.     # 读取stopwords  
  87.     stopwords = pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep=" ",names=['stopword'],encoding='utf-8' 
  88.     words_df = words_df[~words_df.segment.isin(stopwords.stopword)]  
  89.     print(words_df) 
  90.  
  91.  
  92.     words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})  
  93.     words_stat = words_stat.reset_index().sort_values(by=["计数"],ascending=False) 
  94.  
  95.  
  96.     # 设置词云属性  
  97.     color_mask = imread('background.jfif' 
  98.     wordcloud = WordCloud(font_path="simhei.ttf",   # 设置字体可以显示中文  
  99.                     background_color="white",       # 背景颜色  
  100.                     max_words=100,                  # 词云显示的最大词数  
  101.                     mask=color_mask,                # 设置背景图片  
  102.                     max_font_size=100,              # 字体最大值  
  103.                     random_state=42,  
  104.                     width=1000, height=860, margin=2,# 设置图片默认的大小,但是如果使用背景图片的话,                                                   # 那么保存的图片大小将会按照其大小保存,margin为词语边缘距离 
  105.                     ) 
  106.  
  107.  
  108.     # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数  
  109.     word_frequence = {x[0]:x[1]for x in words_stat.head(100).values 
  110.     print(word_frequence)  
  111.     word_frequence_dict = {}  
  112.     for key in word_frequence:  
  113.         word_frequence_dict[key] = word_frequence[key  
  114.  
  115.     wordcloud.generate_from_frequencies(word_frequence_dict)  
  116.     # 从背景图片生成颜色值    
  117.     image_colors = ImageColorGenerator(color_mask)   
  118.     # 重新上色  
  119.     wordcloud.recolor(color_func=image_colors)  
  120.     # 保存图片  
  121.     wordcloud.to_file('output.png' 
  122.     plt.imshow(wordcloud)  
  123.     plt.axis("off" 
  124.     plt.show()  
  125.  
  126. def main():  
  127.     friends = login()  
  128.     show_sex_ratio(friends) 
  129.     show_area_distribution(friends)  
  130.     show_signature(friends) 
  131.  
  132.  
  133. if __name__ == '__main__' 
  134.     main()   

【编辑推荐】

  1. 教你用Python解决非平衡数据问题(附代码)
  2. 调查显示:你是否是一个合格的Python开发者?
  3. 手把手教你写网络爬虫(1):网易云音乐歌单
  4. 手把手教你写网络爬虫(2):迷你爬虫架构-通用网络爬虫
  5. 手把手教你写网络爬虫(3):开源爬虫框架对比
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

超级网管员——网络应用

本书全面、深入地介绍了网络应用技术,主要内容包括:RMS权限管理服务、Exchange邮件服务、LCS即时消息服务、WSUS系统更新服务、Symantec网...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊