python爬微信头像_itchat+pillow实现微信好友头像爬取和拼接

效果图

使用方法(前提是设备安装了python):

下载本项目到本地,打开项目主目录,打开命令行,输入:

pip install -r requirements.txt

等待安装完成,输入:

python wxImage.py

出现如下二维码(知乎不让粘贴二维码,所以下面的二维码被河蟹了):

aHR0cHM6Ly9sb2dpbi53ZWl4aW4ucXEuY29tL2wvSVpUNVl5Zlk3UT09 (二维码自动识别)

用手机微信右上角的扫一扫,确认登陆即可。

稍等片刻,你打开手机微信,找到信息栏的微信传输助手,会看到如下:

核心

python:itchat(用于爬取头像)

pillow(用于拼接图片)

源码详解

首先登陆python版本微信itchat,生成二维码:

itchat.auto_login(enableCmdQR=True)

获取好友列表:

friends = itchat.get_friends(update=True)[0:]

然后使用itchat的get_head_img(userName=none)函数来爬取好友列表的头像,并下载到本地:

num = 0

for i in friends:

img = itchat.get_head_img(userName=i["UserName"])

fileImage = open(user + "/" + str(num) + ".jpg",'wb')

fileImage.write(img)

fileImage.close()

num += 1

计算出每张头像缩小后的尺寸(由于为了拼接之后可以用来作为为微信头像,所以合成的图片大小都是640 640的,因为微信头像大小就是640640)

计算每张头像缩小后的边长(默认为正方形):

eachsize = int(math.sqrt(float(640 * 640) / numPic))

计算合成图片每一边分为多少小边:

numline = int(640 / eachsize)

缩小并拼接图片:

x = 0

y = 0

for i in pics:

try:

#打开图片

img = Image.open(user + "/" + i)

except IOError:

print("Error: 没有找到文件或读取文件失败")

else:

#缩小图片

img = img.resize((eachsize, eachsize), Image.ANTIALIAS)

#拼接图片

toImage.paste(img, (x * eachsize, y * eachsize))

x += 1

if x == numline:

x = 0

y += 1

保存图片到本地:

toImage.save(user + ".jpg")

在微信的文件传输助手发合成后的图片给使用者:

itchat.send_image(user + ".jpg", 'filehelper')

完整代码(下载本人github项目会更好点):

from numpy import *

import itchat

import urllib

import requests

import os

import PIL.Image as Image

from os import listdir

import math

itchat.auto_login(enableCmdQR=True)

friends = itchat.get_friends(update=True)[0:]

user = friends[0]["UserName"]

print(user)

os.mkdir(user)

num = 0

for i in friends:

img = itchat.get_head_img(userName=i["UserName"])

fileImage = open(user + "/" + str(num) + ".jpg",'wb')

fileImage.write(img)

fileImage.close()

num += 1

pics = listdir(user)

numPic = len(pics)

print(numPic)

eachsize = int(math.sqrt(float(640 * 640) / numPic))

print(eachsize)

numline = int(640 / eachsize)

toImage = Image.new('RGBA', (640, 640))

print(numline)

x = 0

y = 0

for i in pics:

try:

#打开图片

img = Image.open(user + "/" + i)

except IOError:

print("Error: 没有找到文件或读取文件失败")

else:

#缩小图片

img = img.resize((eachsize, eachsize), Image.ANTIALIAS)

#拼接图片

toImage.paste(img, (x * eachsize, y * eachsize))

x += 1

if x == numline:

x = 0

y += 1

toImage.save(user + ".jpg")

itchat.send_image(user + ".jpg", 'filehelper')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值