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程序中自定义异常的方法
Oct 16 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
python使用Flask操作mysql实现登录功能
May 14 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
用python写测试数据文件过程解析
Sep 25 Python
python 多维高斯分布数据生成方式
Dec 09 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
Softmax函数原理及Python实现过程解析
May 22 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
selenium+超级鹰实现模拟登录12306
Jan 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
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
JavaScript 函数replace深入了解
2013/03/14 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
python 切片和range()用法说明
2013/03/24 Python
跟老齐学Python之模块的加载
2014/10/24 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
工厂保洁员岗位职责
2013/12/04 职场文书
应届毕业生求职信范文分享
2013/12/26 职场文书
高一物理教学反思
2014/01/24 职场文书
趣味游戏活动方案
2014/02/07 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
学生检讨书如何写
2014/10/30 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers