作者:IPIDEA
2022-09-23 15:23:08
Python如何爬取微信好友的基本信息,清理数据?下面跟着IPIDEA让我们来看看如何实现带来的教程。
1.登录获取朋友基本信息:
获取朋友的方法是get_friends,将返回完整的好友列表。
每个朋友都是字典 列表的第一项是我的账户信息 传入update键为True您可以更新好友列表并返回
微信:
Date:20180918
Author:lizm
Description:爬取微信好友、公众号、群聊基本信息,并进行数据清洗
import itchat
from pandas import DataFrame
import pandas as pd
import re
#1、登录(每次登录都要扫二维码)
itchat.login()
#登录(只需要扫码一次,第二次运行手机微信会弹出确认框)
#itchat.auto_login(hotReload=True)
#爬取自己好友相关信息, 返回一个json文件
friends = itchat.get_friends(update=True)[0:]
#print(friends)
2、统计性别并图形展示(pyecharts)
#2、统计性别
#初始化计数器
male = female = other = 0
#friends[0]是自己的信息,所以要从friends[1]开始
for i in friends[1:]:
sex = i["Sex"]
if sex == 1:
male += 1
elif sex == 2:
female += 1
else:
other +=1
#计算朋友总数
total = len(friends[1:])
#打印出自己的好友性别比例
print("男性好友: %.2f%%" % (float(male)/total*100) + " " +
"女性好友: %.2f%%" % (float(female) / total * 100) + " " +
"不明性别好友: %.2f%%" % (float(other) / total * 100))
#pyecharts图形
from pyecharts import Bar
bar =Bar("性别比例图", "微信好友")
bar.add("性别", ["男", "女", "未知"], [male, female, other])
bar.show_config()
bar.render()
3、将基本信息保存到csv
#3、将基本信息保存到csv
def filter_emoji(desstr,restr=):
#过滤表情
try:
co = re.compile(u[U00010000-U0010ffff])
except re.error:
co = re.compile(u[uD800-uDBFF][uDC00-uDFFF])
return co.sub(restr, desstr)
#定义一个函数,用来爬取各个变量
import emoji
def get_var(var):
variable = []
for friend in friends:
value = friend[var]
if isinstance(value,str):
value = value.strip()
#value = emoji.demojize(value)
value = filter_emoji(value,)
rep = re.compile("1fd+w*|[<>/=]")
value = rep.sub("", value)
rep1 = re.compile("[s+.!/_,$%^*(+"]+|[+——!,。?、~@#¥%……&*()]+")
value = rep1.sub(,value)
print("爬取数据[%s]>>>>:%s" %(var,value))
else:
pass
variable.append(value)
return variable
#调用函数得到各变量,并把数据存到csv文件中,保存到桌面
NickName = get_var("NickName")
Sex = get_var(Sex)
Province = get_var(Province)
City = get_var(City)
Signature = get_var(Signature)
data = {NickName: NickName, Sex: Sex, Province: Province,
City: City, Signature: Signature}
frame = DataFrame(data)
#windows下运行,需要转码,系统默认是gbk,需要手动设置;注意:utf-8还是乱码,得设置为utf-8-sig
frame.to_csv(data.csv, index=True,encoding=utf_8_sig)
在这里,我们的过程已经完成了一半,还有两个关键步骤,我们将继续分析下一篇文章。