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中日期和时间格式化输出的方法小结
Mar 19 Python
python通过ftplib登录到ftp服务器的方法
May 08 Python
python之消除前缀重命名的方法
Oct 21 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
Oct 09 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
使用AJAX和Django获取数据的方法实例
Oct 25 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
Python如何实现感知器的逻辑电路
Dec 25 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 Python
Python语言规范之Pylint的详细用法
Jun 24 Python
Python中字符串对象语法分享
Feb 24 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
php 强制下载文件实现代码
2013/10/28 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
vue中Element-ui 输入银行账号每四位加一个空格的实现代码
2018/09/14 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
高校自主招生自荐信
2013/12/09 职场文书
离婚协议书怎么写
2014/09/12 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
雷锋之歌观后感
2015/06/10 职场文书
养成教育工作总结
2015/08/13 职场文书
Python之matplotlib绘制饼图
2022/04/13 Python