此小项目参考《微信好友数据分析 》——余本国
一、功能介绍:
本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并
进行一些简单的数据分析,功能包括:
1.爬取好友列表,显示好友昵称、性别和地域和签名, 文件保存为 xlsx 格式
2.统计好友的地域分布,并且做成词云和可视化展示在地图上
3.获取所有好友的头像,合并成一张大图
三、运行环境及相关库的安装
- Python 3.x(使用Anaconda的spyder编辑器)
- 使用到的Python库安装:
- 在Anaconda的Anaconda Prompt下运行下列命令,安装前先升级pip,代码如下:
Python -m pip install --upgrade pip
-
安装 wxpy: pip install wxpy
-
安装 PIL: pip install pillow
-
安装 pyecharts:pip install pyecharts
-
安装 Itchat: pip install itchat
-
安装 Jieba: pip install jieba
-
安装 Pandas:pip install Pandas
- 安装 Numpy:pip install Numpy
-
安装地图数据包:pip install echarts-china-provinces-pypkg
- pip install echarts-countries-pypkg
四、如何运行?(初次运行可以使用spyder的IPython console进行交互式输入)
以上库安装好了以后就可进行以下步骤coding
1.登录——获取用户信息:
打开spyder的IPython console 进行交互式编写
In [3]: from wxpy import * #导入模块 In [4]: bot=Bot(cache_path=True)#初始化机器人,选择缓存模式(扫码)登录 Getting uuid of QR code. Downloading QR code. Please scan the QR code to log in. Please press confirm on your phone. Loading the contact, this may take a little while. Login successfully as 舒心陈 In [5]: friend_all=bot.friends() In [6]: print(friend_all[0].raw)#friend_all[0]是你的微信昵称,.raw则是获取你的全部信息 {‘UserName‘: ‘@616bbbd522bbfce0dcad9082de7100b2548b9d8c54f466933fe26ce46f4eb80c‘, ‘City‘: ‘‘, ‘DisplayName‘: ‘‘, ‘PYQuanPin‘: ‘‘, ‘RemarkPYInitial‘: ‘‘, ‘Province‘: ‘‘, ‘KeyWord‘: ‘‘, ‘RemarkName‘: ‘‘, ‘PYInitial‘: ‘‘, ‘EncryChatRoomId‘: ‘‘, ‘Alias‘: ‘‘, ‘Signature‘: ‘好开心啊~‘, ‘NickName‘: ‘舒心陈‘, ‘RemarkPYQuanPin‘: ‘‘, ‘HeadImgUrl‘: ‘/cgi-bin/mmwebwx-bin/webwxgeticon?seq=879163398&username=@616bbbd522bbfce0dcad9082de7100b2548b9d8c54f466933fe26ce46f4eb80c&skey=@crypt_6e5fb2f2_41b8311b5e5bb5ea58c12688ff48ccf9‘, ‘UniFriend‘: 0, ‘Sex‘: 1, ‘AppAccountFlag‘: 0, ‘VerifyFlag‘: 0, ‘ChatRoomId‘: 0, ‘HideInputBarFlag‘: 0, ‘AttrStatus‘: 0, ‘SnsFlag‘: 1, ‘MemberCount‘: 0, ‘OwnerUin‘: 0, ‘ContactFlag‘: 0, ‘Uin‘: 3129189532, ‘StarFriend‘: 0, ‘Statues‘: 0, ‘MemberList‘: [], ‘WebWxPluginSwitch‘: 0, ‘HeadImgFlag‘: 1}
2、统计用户信息
In [7]: len(friend_all) #统计查阅了多少好友 Out[7]: 173
为了获取好友信息中需要的部分,我们对信息需要进行处理。从上面的获取信息全字段来看,我们获取的每位好友的信息都是一个字典,字典里只有‘City‘、‘Province‘、‘Signature‘、
‘NickName‘、‘HeadImgUrl‘、‘Sex‘是我们需要的。下面我们就对这几个 key 进行提取。方法是:对这几个 key 提取相应的值,放入一个列表 list_0 中,即每个好友的这些 key
的值做成了一个列表,在对所有的好友使用 for 循环进行同样的操作,将所有好友的列表做成一个大列表 lis 的元素,即列表中的元素是列表。
In[7]:lis=[] In[8]:for a_friend in friend_all: NickName=a_friend.raw.get(‘NickName‘,None) #Sex=a_friend.raw.get(‘Sex‘,None) Sex={1:"男",2:"女",0:"其他"}.get(a_friend.raw.get(‘Sex‘,None),None) City=a_friend.raw.get(‘City‘,None) Province=a_friend.raw.get(‘Province‘,None) Signature=a_friend.raw.get(‘Signature‘,None) HeadImgUrl=a_friend.raw.get(‘HeadImgUrl‘,None) HeadImgFlag=a_friend.raw.get(‘HeadImgFlag‘,None) list_0=[NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag] lis.append(list_0)
为了将 lis 列表能够保存到 excel 中,便于后面的使用,也便于此方法的再次使用,我们将这个功能写成函数 lis2e07(),即将这种列表套列表的 lis 转成 07 版以上的 exce 进行保存在本地。
def lis2e19(filename,lis): ‘‘‘ 将列表写入 07 版 excel 中,其中列表中的元素是列表. filename:保存的文件名(含路径) lis:元素为列表的列表,如下: lis = [["名称", "价格", "出版社", "语言"], ["暗时间", "32.4", "人民邮电出版社", "中文"], ["拆掉思维里的墙", "26.7", "机械工业出版社", "中文"]] ‘‘‘ import openpyxl wb = openpyxl.Workbook() sheet = wb.active sheet.title = ‘list2excel19‘ file_name = filename for i in range(0, len(lis)): for j in range(0, len(lis[i])): sheet.cell(row=i+1, column=j+1, value=str(lis[i][j])) wb.save(file_name) print("写入数据成功!") lis2e19(r‘C:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx‘,lis)
将列表信息存储到 excel 中,文件名为 yubg1.xlsx。
lis2e19(r‘C:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx‘,lis)
打开文件(部分截图):
对数据进行初略的认知分析。
#对数据进行初步探索 #方法一 #粗略获取好友的统计信息 data = friend_all.stats_text(total=True, sex=True,top_provinces=10, top_cities=100) from pandas import read_excel df=read_excel(r‘C:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx‘,sheetname=‘list2excel19‘)
print(data)
部分数据截图如下:
五、功能模块代码