欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 爬取微信朋友圈的一些信息

程序员文章站 2022-07-12 22:12:51
...
一、工具:使用python 3.6 自带的编辑器IDEL,在命令行可以正常运行。
二、此程序用到的一些库和包:
(1)itchat:itchat是一个开源的微信个人号接口,可以登录微信账号;点击打开链接(此链接为关于itchat用法的文档)
(2)jieba分词使用手册
(3)pyecharts 包基本用法点击打开链接
(4)numpy:numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
(5pandas用法 点击打开链接
三、此程序实现的功能:
(1)爬取朋友圈的男女比例
(2)圈内朋友所在省份
(3)朋友圈的个性签名

代码如下:

# coding:utf-8
import itchat
import re
itchat.login()
friends = itchat.get_friends(update=True)[0:]  #爬取好友的相关信息,返回一个friends文件

#自己微信好友的男女比例
male=female=other=0
#friend[0]是自己的信息,从friend[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('male: %d' % int(male))
print('female: %d' % int(female))
print('other: %d' % int(other))
print('male:  %.2f%%' % (float(male)/total*100))
print('female: %.2f%%' % (float(female)/total*100))
print('other: %.2f%%' % (float(other)/total*100))

#绘制性别饼图
from pyecharts import Pie
attr=['male','female','other']
vl=[123,125,23]
pie=Pie("性别比例")
pie.add('',attr,vl,is_label_show=True)
pie.render(r"D:\WorkSpace\Python3.6.0\Sex.html") #默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"e:\my_first_chart.html"),文件用浏览器打开。

#定义一个函数把好友昵称、省份、城市、性别、签名等数据都爬下来,存到数据框
#首先定义一个函数,用来爬取各个变量
def get_var(var):
      variable=[]
      for i in friends:
            value=i[var]
            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')

from pandas import DataFrame
data={'NickName':NickName,'Sex':Sex,'Province':Province,'City':City,'Signature':Signature}
frame=DataFrame(data)
frame.to_csv('data2.csv',index=True)

import csv
with open('data2.csv','r',encoding = "utf-8") as myFile:
      reader=csv.reader(myFile)
      for row in reader:
            print(row)
           
from pyecharts import Bar
Provinces=[]
for f in friends:
      Province=f.Province
      Provinces.append(Province)
      
a={}
for i in Provinces:
       a[i]=Provinces.count(i)

b=sorted(a.items(),key=lambda item:item[1])

attrs=[]
values=[]
j=0
while j<len(b):
       attr=b[j][0]
       value=b[j][1]
       attrs.append(attr)
       values.append(value)
       j+=1

#开始绘图

bar=Bar('好友所在省份')
bar.add('省份',attrs,values, is_stack=True,is_datazoom_show=True)
bar.render()

tList = []
for i in friends:
    signature = i["Signature"].replace(" ", "").replace("span", "").replace("class", "").replace("emoji", "")
    rep = re.compile("1f\d.+")
    signature = rep.sub("", signature)
    tList.append(signature)
    # 拼接字符串
    text = "".join(tList)
    
# jieba分词
import jieba
wordlist_jieba = jieba.cut(text, cut_all=True)
wl_space_split = " ".join(wordlist_jieba)
# wordcloud词云
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import os
import numpy as np
import PIL.Image as Image
d= os.path.dirname(os.path.abspath( __file__ ))
alice_coloring = np.array(Image.open(os.path.join(d, "wechat.jpg")))
my_wordcloud = WordCloud(background_color="white", max_words=2000,mask=alice_coloring,max_font_size=400, random_state=420,font_path='D:\WorkSpace\Python3.6.0\simkai.ttf').generate(wl_space_split)
image_colors = ImageColorGenerator(alice_coloring)
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
四、结果图如下:
python 爬取微信朋友圈的一些信息
python 爬取微信朋友圈的一些信息
个性签名:
python 爬取微信朋友圈的一些信息
相关标签: python 爬虫