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 相关文章推荐
windows下python之mysqldb模块安装方法
Sep 07 Python
Python 模拟购物车的实例讲解
Sep 11 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
在Pandas中处理NaN值的方法
Jun 25 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
Python如何操作docker redis过程解析
Aug 10 Python
使用tkinter实现三子棋游戏
Feb 25 Python
python实现商品进销存管理系统
May 30 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
Python实现队列的方法
2015/05/26 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
国贸专业的职业规划范文
2014/01/23 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
2014年采购部工作总结
2014/11/20 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA
Spring Boot实现文件上传下载
2022/08/14 Java/Android