python itchat 爬取微信好友信息
「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚空
三张图分别是「微信好友头像拼接图」、「性别统计图」、「个性签名统计图」
「微信好友头像拼接图」
「性别统计图」
「个性签名统计图」
安装
pip3 install itchat
主要用到的方法:itchat.login()
微信扫描二维码登录itchat.get_friends()
返回完整的好友列表,每个好友为一个字典, 其中第一项为本人的账号信息,传入update=True
, 将更新好友列表并返回, get_friends(update=True)
itchat.get_head_img(userName="")
根据userName
获取好友头像
微信好友头像拼接图
获取好友信息,get_head_img
拿到每个好友的头像,保存文件,将头像缩小拼接至一张大图。
先获取好友头像:
def headImg(): itchat.login() friends = itchat.get_friends(update=True) # itchat.get_head_img() 获取到头像二进制,并写入文件,保存每张头像 for count, f in enumerate(friends): # 根据userName获取头像 img = itchat.get_head_img(userName=f["UserName"]) imgFile = open("img/" + str(count) + ".jpg", "wb") imgFile.write(img) imgFile.close()
这里需要提前在同目录下新建了文件夹img
,否则会报No such file or directory
错误,img
用于保存头像图片,遍历好友列表,根据下标count
命名头像,到这里可以看到文件夹里已经保存了所有好友的头像。
接下来就是对头像进行拼接
遍历文件夹的图片,random.shuffle(imgs)
将图片顺序打乱
用640*640的大图来平均分每一张头像,计算出每张正方形小图的长宽,压缩头像,拼接图片,一行排满,换行拼接,好友头像多的话,可以适当增加大图的面积,具体代码如下:
def createImg(): x = 0 y = 0 imgs = os.listdir("img") random.shuffle(imgs) # 创建640*640的图片用于填充各小图片 newImg = Image.new('RGBA', (640, 640)) # 以640*640来拼接图片,math.sqrt()开平方根计算每张小图片的宽高, width = int(math.sqrt(640 * 640 / len(imgs))) # 每行图片数 numLine = int(640 / width) for i in imgs: img = Image.open("img/" + i) # 缩小图片 img = img.resize((width, width), Image.ANTIALIAS) # 拼接图片,一行排满,换行拼接 newImg.paste(img, (x * width, y * width)) x += 1 if x >= numLine: x = 0 y += 1 newImg.save("all.png")
好友头像图成型,头像是随机打乱拼接的
性别统计图
同样itchat.login()
登录获取好友信息,根据Sex
字段判断性别,1 代表男性(man),2 代表女性(women),3 未知(unknown)
def getSex(): itchat.login() friends = itchat.get_friends(update=True) sex = dict() for f in friends: if f["Sex"] == 1: #男 sex["man"] = sex.get("man", 0) + 1 elif f["Sex"] == 2: #女 sex["women"] = sex.get("women", 0) + 1 else: #未知 sex["unknown"] = sex.get("unknown", 0) + 1 # 柱状图展示 for i, key in enumerate(sex): plt.bar(key, sex[key]) plt.show()
性别统计柱状图
个性签名统计图
获取好友信息,Signature
字段是好友的签名,将个性签名保存到.txt文件,部分签名里有表情之类的会变成emoji 类的词,将这些还有特殊符号的替换掉。
def getSignature(): itchat.login() friends = itchat.get_friends(update=True) file = open('sign.txt', 'a', encoding='utf-8') for f in friends: signature = f["Signature"].strip().replace("emoji", "").replace("span", "").replace("class", "") # 正则匹配 rec = re.compile("1f\d+\w*|[<>/=]") signature = rec.sub("", signature) file.write(signature + "\n")
sign.txt
文件里写入了所有好友的个性签名,使用wordcloud包生成词云图,pip install wordcloud
同样可以采用jieba
分词生成词图,不使用分词的话就是句子展示,使用jieba
分词的话可以适当把max_font_size
属性调大,比如100。
需要注意的是运行不要在虚拟环境下,deactivate
退出虚拟环境再跑,详细代码如下:
# 生成词云图 def create_word_cloud(filename): # 读取文件内容 text = open("{}.txt".format(filename), encoding='utf-8').read() # 注释部分采用结巴分词 # wordlist = jieba.cut(text, cut_all=True) # wl = " ".join(wordlist) # 设置词云 wc = WordCloud( # 设置背景颜色 background_color="white", # 设置最大显示的词云数 max_words=2000, # 这种字体都在电脑字体中,window在C:\Windows\Fonts\下,mac下可选/System/Library/Fonts/PingFang.ttc 字体 font_path='C:\\Windows\\Fonts\\simfang.ttf', height=500, width=500, # 设置字体最大值 max_font_size=60, # 设置有多少种随机生成状态,即有多少种配色方案 random_state=30, ) myword = wc.generate(text) # 生成词云 如果用结巴分词的话,使用wl 取代 text, 生成词云图 # 展示词云图 plt.imshow(myword) plt.axis("off") plt.show() wc.to_file('signature.png') # 把词云保存下
句子图
使用jieba
分词产生的词云图
看来,「努力」 「生活」 还是很重要的
itchat 除了以上的信息,还有省市区等等信息都可以抓取,另外还可以实现机器人自动聊天等功能,这里就不一一概述了。
最后附上github地址:https://github.com/taixiang/itchat_wechat
欢迎关注我的博客:https://blog.manjiexiang.cn/
欢迎关注微信号:春风十里不如认识你
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云身份管理与访问控制之信任管理: 角色扮演, 临时身份和安全令牌
本文介绍了阿里云访问控制中的角色扮演和临时身份特性。这两个特性帮助客户管理好对合作伙伴, 云服务协同应用, 以及客户应用服务的信任与访问授权, 构成了阿里云安全受控的合作生态的技术基础设施的一部分。 信任管理 云平台中的资源, 我们可以授权给信任的员工, 合作伙伴, 平台服务, 我们自己部署的应用等不同的身份来访问. 合作伙伴A来负责代运维一组Linux服务器, 除此以外不能访问其他资源; 合作伙伴B来负责维护RDB服务, 除此以外不能访问其他资源; 授权给阿里云的多媒体处理服务来处理存放在OSS中指定目录中的图片和视频, 但不能访问其他目录里中的资源. 部署在ECS中的运维工具, 能够根据负载变动情况, 自动关闭一些ECS机器, 或自动升级或启动一些ECS机器. 这些应用场景中的信任管理, 都是通过角色扮演和临时身份实现的. 角色扮演 阿里云账号中的资源分权访问, 对于员工可以使用子用户来实现. 对于不适合子用户(含子用户组)授权的情况, 采取基于角色扮演的授权方法更安全便捷. 比如, 合作伙伴帮助做运维时, 会在他们自己的主账号中管理自身的员工子用户, 我们所需要做的是创建一个(或...
- 下一篇
Python程序设计思维练习---股票数据定向爬虫
本次练习是一个定向爬虫,爬取股票的相关数据,用到beautifulsoup,re,requests等库。 爬前分析:先分析比较不同网站提供的股票数据,在这里比较的是新浪股票和百度股票。因为百度股票的相关数据直接在html页面中爬取相对方便,而新浪股票的数据是通过js来传递的,获取比较麻烦,所以选择百度股票作为数据来源。 爬取流程:通过东方财富网得到上交所和深交所的所有股票代码,将股票代码依次导入百度股票的url中,即可访问各股的数据,再来分析百度股票的HTML页面爬取相关数据。 工具环境:python3.6.5,pycharm,win10。 图片来自拍信 0.网页分析 想必大家应该不是第一次爬取数据了,对于F12开发者工具有了一定了解,所以这里就不再赘述了。对于数据来源,别执着于一个网站,可以多分析几个网站来选择相对爬取简单的网站来进行数据的爬取。 1.流程分析 东方财富网源代码 百度股票的URL: http://gupiao.baidu.com/stock/sh502036.html 分析可得:只需将东方财富网中的 .html前的股票代码提取出来并加入到 https://gupiao...
相关文章
文章评论
共有0条评论来说两句吧...