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语言的12个基础知识点小结
Jul 10 Python
Python跳出循环语句continue与break的区别
Aug 25 Python
python中list循环语句用法实例
Nov 10 Python
python logging 日志轮转文件不删除问题的解决方法
Aug 02 Python
python基础教程之五种数据类型详解
Jan 12 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
Python向excel中写入数据的方法
May 05 Python
python树的同构学习笔记
Sep 14 Python
python 实现批量图片识别并翻译
Nov 02 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
无限级别菜单的实现
2006/10/09 PHP
文章推荐系统(二)
2006/10/09 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
Python求出0~100以内的所有素数
2018/01/23 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
python读取各种文件数据方法解析
2018/12/29 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Python用input输入列表的实例代码
2020/02/07 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
python可以用哪些数据库
2020/06/22 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
竞争上岗实施方案
2014/03/21 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书