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实现多线程暴力破解登陆路由器功能代码分享
Jan 04 Python
python提取内容关键词的方法
Mar 16 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
python如何求解两数的最大公约数
Sep 27 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
python跳出双层for循环的解决方法
Jun 24 Python
python从Oracle读取数据生成图表
Oct 14 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 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 常用类汇总 推荐收藏
2010/05/13 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
使用python编写监听端
2018/04/12 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
Python实现微信小程序支付功能
2019/07/25 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
python学习笔记之多进程
2020/08/06 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
耐克中国官方商城:Nike中国
2018/10/18 全球购物
比利时家具购买网站:Home24
2019/01/03 全球购物
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python
python计算列表元素与乘积详情
2022/08/05 Python