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基础教程之面向对象的一些概念
Aug 29 Python
python脚本设置系统时间的两种方法
Feb 21 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python找出最小的K个数实例代码
Jan 04 Python
python多线程之事件Event的使用详解
Apr 27 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
python提取包含关键字的整行数据方法
Dec 11 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
详解python中GPU版本的opencv常用方法介绍
Jul 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学习笔记 数组的常用函数
2011/06/13 PHP
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
jQuery遍历DOM元素与节点方法详解
2016/04/14 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
学习Node.js模块机制
2016/10/17 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
浅谈Python处理PDF的方法
2017/11/10 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python里运用私有属性和方法总结
2019/07/08 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
python怎么对数字进行过滤
2020/07/05 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
客房主管岗位职责
2013/12/09 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
搞笑的获奖感言
2014/08/16 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
小学班主任事迹材料
2014/12/17 职场文书
军训结束新闻稿
2015/07/17 职场文书
简短清晨问候语
2015/11/10 职场文书