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 判断一个进程是否存在
Apr 09 Python
python爬虫入门教程之糗百图片爬虫代码分享
Sep 02 Python
python关闭windows进程的方法
Apr 18 Python
python 写的一个爬虫程序源码
Feb 28 Python
Mac 上切换Python多版本
Jun 17 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
Python 使用matplotlib模块模拟掷骰子
Aug 08 Python
开启Django博客的RSS功能的实现方法
Feb 17 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
Python计算矩阵的和积的实例详解
Sep 10 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排序算法(冒泡排序,快速排序)
2012/10/09 PHP
PHP无限分类(树形类)
2013/09/28 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php微信公众平台开发类实例
2015/04/01 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
javascript数组去掉重复
2011/05/12 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
vue实现微信分享功能
2018/11/28 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现堆和索引堆的代码示例
2018/03/19 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
python实现微信自动回复及批量添加好友功能
2019/07/03 Python
解析python实现Lasso回归
2019/09/11 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python相对企业语言优势在哪
2020/06/12 Python
python中np是做什么的
2020/07/21 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
《盲人摸象》教学反思
2014/02/16 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
行政求职信
2014/07/04 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python