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 相关文章推荐
在Django中创建第一个静态视图
Jul 15 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
python 异或加密字符串的实例
Oct 14 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
Python正则表达式和re库知识点总结
Feb 11 Python
numpy.linspace函数具体使用详解
May 27 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
pytorch中的inference使用实例
Feb 20 Python
Python socket处理client连接过程解析
Mar 18 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
Python基于gevent实现文件字符串查找器
Aug 11 Python
python 生成器需注意的小问题
Sep 29 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
上海无线电三厂简史修改版
2021/03/01 无线电
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
Python赋值语句后逗号的作用分析
2015/06/08 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
详解Anaconda 的安装教程
2020/09/23 Python
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
迷你西餐厅创业计划书范文
2013/12/31 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2014年党小组工作总结
2014/12/20 职场文书
初中家长评语大全
2014/12/26 职场文书
经理岗位职责
2015/02/02 职场文书
初三数学教学反思
2016/02/17 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
SpringBoot生成License的实现示例
2021/06/16 Java/Android
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python
mysql 排序失效
2022/05/20 MySQL
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技