Python获取好友地区分布及好友性别分布情况代码详解


Posted in Python onJuly 10, 2019

利用Python + wxpy 可以快速的查询自己好友的地区分布情况,以及好友的性别分布数量。还可以批量下载好友的头像,拼接成大图。

本次教程是基于上次机器人后的,所有依赖模块都可以复用上次的,还不知道的小伙伴可以戳这里。

python + wxpy 机器人

准备工作

  1. 编辑器
  2. 一个注册一年以上的微信号

公共部分代码

from wxpy import * // wxpy 依赖
from PIL import Image  // 二维码登录依赖
import os  // 本地下载依赖
import math
import webbrowser
from pyecharts import Map  // 地图展示依赖
from pyecharts import Pie  // 饼状图依赖

1. 批量下载好友头像

# 创建头像存放文件夹
def avaterPath():
  avaterDir = os.path.join(os.getcwd(), 'wechat')
  if not os.path.exists(avaterDir):
    os.mkdir(avaterDir)
  return avaterDir

# 获取所有的好友头像并保存
def saveWxAvater(avaterDir):
  bot = Bot(cache_path=True)
  allFriends = bot.friends(update=True)
  num = 0
  for friend in allFriends:
    friend.getAvatar(os.path.join(avaterDir,f'{str(num)}.jpg'))
    print("好友昵称:%s"%friend.name)

    num += 1

# 拼接头像
def joinAvatar(path):
  # 获取文件夹内头像个数
  length = len(os.listdir(path))
  # 设置画布大小
  image_size = 2560
  # 设置每个头像大小
  each_size = math.ceil(2560 / math.floor(math.sqrt(length)))
  # 计算所需各行列的头像数量
  x_lines = math.ceil(math.sqrt(length))
  y_lines = math.ceil(math.sqrt(length))
  image = Image.new('RGB', (each_size * x_lines, each_size * y_lines))
  x = 0
  y = 0
  for (root, dirs, files) in os.walk(path):
    for pic_name in files:
      try:
        with Image.open(os.path.join(path, pic_name)) as img:
          img = img.resize((each_size, each_size))
          image.paste(img, (x * each_size, y * each_size))
          x += 1
          if x == x_lines:
            x = 0
            y += 1
      except Exception as e:
        print(F"头像读取失败,错误:{e}")

  img = image.save(os.path.join(os.getcwd(), 'wechat.png'))
  print('wx好友头像拼接完成!')


if __name__ == '__main__':
  avatarDir = avaterPath()
  saveWxAvater(avatarDir)
  joinAvatar(avatarDir)

2. 获取好友性别分布

bot = Bot(cache_path=True) # 弹出二维码登录微信,生成bot对象

allFriends = bot.friends() # 获取所有的微信好友信息

type = ['男同学','女同学','外星人'] # 男/女/未知性别好友名称

v = [0, 0, 0] # 初始化对象好友数量

# 遍历所有好友,判断该好友性别
for friend in friends:
  if friend.sex == 1:
    v[0] += 1
  elif friend.sex == 2:
    v[1] += 1
  else:
    v[2] += 1

pie = Pie("好友性别分布")

pie.add("", type, v, is_label_show=True)

pie.render("sex.html")

webbrowser.open('sex.html')

效果

Python获取好友地区分布及好友性别分布情况代码详解

3. 获取好友地区分布情况

代码部分:

bot = Bot(cache_path=True) # 弹出二维码登录微信,生成bot对象

allFriends = bot.friends() # 获取所有的微信好友信息

areaDic = {} # 定义一个空字典,用于存放省市以及省市人数

for friend in allFriends:
  if friend.province not in areaDic:
    areaDic[friend.province] = 1
  else:
    areaDic[friend.province] += 1

keys = area_dic.keys()
v = area_dic.values()

map = Map("好友地域分布", width=1200, height=600)
map.add("好友地域分布" ,keys, v, maptype='china', is_visualmap=True)
map.render("area.html")
webbrowser.open("area.html")

总结

以上所述是小编给大家介绍的Python获取好友地区分布及好友性别分布情况代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python中实现的RC4算法
Feb 14 Python
Python与shell的3种交互方式介绍
Apr 11 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
Python中设置变量访问权限的方法
Apr 27 Python
python使用turtle库绘制时钟
Mar 25 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
Python 保存加载mat格式文件的示例代码
Aug 04 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
Python中快速掌握Data Frame的常用操作
Mar 31 Python
python​格式化字符串
Apr 20 Python
Python中的类与类型示例详解
Jul 10 #Python
使用python打印十行杨辉三角过程详解
Jul 10 #Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 #Python
Python中新式类与经典类的区别详析
Jul 10 #Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 #Python
python的几种矩阵相乘的公式详解
Jul 10 #Python
Python内存管理实例分析
Jul 10 #Python
You might like
php网上商城购物车设计代码分享
2012/02/15 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
户籍证明的格式
2014/01/13 职场文书
运动会广播稿80字
2014/01/23 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
2014公司年终工作总结
2014/12/19 职场文书
先进个人材料怎么写
2014/12/30 职场文书
语文教师个人工作总结
2015/02/06 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书