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文件操作类操作实例详解
Jul 11 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
python破解zip加密文件的方法
May 31 Python
eclipse创建python项目步骤详解
May 10 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
python有几个版本
Jun 17 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
PHP时间戳使用实例代码
2008/06/07 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
纯javascript版日历控件
2016/11/24 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
安全生产检查通报
2014/01/29 职场文书
火车的故事教学反思
2014/02/11 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
寻找成龙观后感
2015/06/12 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
军训通讯稿范文
2015/07/18 职场文书