itchat+pillow实现微信好友头像爬取和拼接
本篇“玩python”来源答主链接:
环境配置:
1.系统环境:Windows 7 64bit
2.编译环境:Python3.4.3
3.依赖库: requests itchat PIL
4.其他工具:微信手机客户端 手机 微信账号(- -)
代码浅析
使用python登录微信网页版
itchat.auto_login(enableCmdQR=True)
代码很简单,调用itchat的方法,会在终端弹出二维码,扫一扫就会登录网页版。在这一步出错,只能说相关的库版本不对或者没装,而我在这里出现的是一个这种错误:SSLError: HTTPSConnectionPool(host='login.weixin.qq.com', port=443
,而google一下,发现有的答案是说pyOpenSSL库不是最新,于是敲下:
pip install pyOpenSSL
搞定,自动安装最新版本。
获取好友头像
friends = itchat.get_friends(update=True)[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(width*length),如果想合成多少尺寸的图片都可自由选择,计算思路也是小学数学,面积啊,边长啊等等,不再赘述。
合成图片
NewImage = Image.new('RGBA', (newsizeW, newsizeL))
x = 0
y = 0
pics = glob.glob(r"*.jpg")
for i in pics:
try:
#打开图片
img = Image.open(i)
except IOError:
print("Error: 没有找到文件或读取文件失败")
else:
#缩小图片
img = img.resize((smallsize,smallsize ), Image.ANTIALIAS)
#拼接图片
NewImage.paste(img, (x *smallsize , y *smallsize ))
x += 1
if x == numline:
x = 0
y += 1
NewImage.save(user + ".jpg")
实际上下载完就可以退出微信,据说微信要整改,禁止网页多登陆,防止被封号,建议在下载完就退出。可以用itchat.logout()
。这一步踩到一个坑,就是except异常的时候,当你的好友没有设置头像时,就会打开图像异常。然后当时第一判断是名字读错,打印些log出来,发现是在打开27.jpg会异常,点开文件夹一看,原来是没有图像。手动删除(好懒啊),程序又成了专门定制,无法通用。
效果图
回顾与思考
- python有各种各样的库来做一些好玩有趣的事情,但是基础一定要好,尽量避免出现不必要的bug。
- 尽量打开思路,不一定被原作者束缚,像这个原作个人认为代码写的并不优秀,但是也有借鉴之处。
- 坚持继续学习,工作再忙也要搞搞python。