python爬虫微信_python之微信爬虫

1 #-*- coding: utf-8 -*-

2 """

3 Created on Wed Jun 5 12:33:27 20194

5 @author: m13536 """

7

8 from wxpy import Bot9 import openpyxl10 from pyecharts import Map11 from wordcloud import WordCloud12 import matplotlib.pyplot as plt13 import jieba14

15 class WeChatRobot:16

17 '''====================== 1. 获取微信好友信息 ======================'''18 def __init__(self, ToExcelFile="", ToCityFile="", ToMapProvinceFile="", ToMapCityFile=""):19 ''' 初始化机器人和其他参数 '''20 #初始化机器人,需要扫码

21 self.bot =Bot()22 #获取我所有的微信好友信息 - 存储基础信息(未处理)

23 self.allFriends_Info =self.bot.friends()24 #我的微信好友个数

25 self.allFriends_Num =len(self.allFriends_Info)26 #保存微信好友信息的表格文件路径(.xlsx)

27 self.ExcelFile =ToExcelFile28 #保存城市词云图的文件路径(.png/.jpg)

29 self.WCOfCityFile =ToCityFile30 #保存省份地图的文件路径(.html)

31 self.MapProvinceFile =ToMapProvinceFile32 #其他可用参数

33 self.MapCityFile =ToMapCityFile34 #自动调用run方法,使得在实例化对象后自动运行其他函数

35 self.run()36

37 '''====================== 2. 统计微信好友信息 ======================'''38 def getFriendsInfo(self):39 ''' 获取微信好友的全部信息 '''40 #存储微信好友的信息(经过信息处理的)

41 self.friendsInfo =[]42 #定义列标题

43 self.infoTitle =['NickName', 'RemarkName', 'Sex', 'Province', 'City']44 for aFriend inself.allFriends_Info:45 #获取昵称

46 NickName = aFriend.raw.get(self.infoTitle[0], None)47 #获取备注

48 RemarkName = aFriend.raw.get(self.infoTitle[1], None)49 #获取性别

50 Sex = {1:"男", 2:"女", 0:"其他"}.get(aFriend.raw.get(self.infoTitle[2], None), None)51 #获取省份

52 Province = aFriend.raw.get(self.infoTitle[3], None)53 #获取城市

54 City = aFriend.raw.get(self.infoTitle[4], None)55 lisTmp =[NickName, RemarkName, Sex, Province, City]56 self.friendsInfo.append(lisTmp)57

58 '''====================== 3. 保存微信好友信息 ======================'''59 def saveFriendsInfoAsExcel(self, ExcelName):60 ''' 保存微信好友的信息到 Excel 表格中 '''61 #生成openpyxl对象

62 workbook =openpyxl.Workbook()63 #激活表格

64 sheet =workbook.active65 #设置表格标题

66 sheet.title ='WeChatFriendsInfo'67 #填充列标题到第一行

68 for _ inrange(len(self.infoTitle)):69 sheet.cell(row=1, column=_+1, value=self.infoTitle[_])70 #填充微信好友信息,从第二行开始

71 for i inrange(self.allFriends_Num):72 for j inrange(len(self.infoTitle)):73 sheet.cell(row=i+2, column=j+1, value=str(self.friendsInfo[i][j]))74 #若文件名非空,则保存到该路径下

75 if ExcelName != "":76 workbook.save(ExcelName)77 print(">>> Save WeChat friends' information successfully!")78

79 '''====================== 4. 分析微信好友信息 ======================'''80 def quiteAnalyzeFriendsInfo(self):81 ''' 分析数据,一步到位,直接了当 '''82 print(self.allFriends_Info.stats_text())83

84 '''====================== 5. 产生city词云图 ======================'''85 def creatWordCloudOfCity(self, CityName):86 ''' 使用获取的数据生成city词云图 '''87 #获取所有的城市

88 cityStr = ""

89 for i inrange(self.allFriends_Num):90 if self.friendsInfo[i][4] not incityStr:91 cityStr += " " + self.friendsInfo[i][4]92 #jieba库精确模式分词

93 wordlist =jieba.lcut(cityStr)94 cityStr =' '.join(wordlist)95 #加载背景图片

96 #cloud_mask = np.array(Image.open(BackGroundFile))

97 #设置词云图属性

98 font = r'C:\Windows\Fonts\simfang.ttf' #设置字体路径

99 wc =WordCloud(100 background_color = 'black', #背景颜色

101 #mask = cloud_mask, # 背景图片

102 max_words = 100, #设置最大显示的词云数

103 font_path = font, #设置字体形式(在本机系统中)

104 height = 300, #图片高度

105 width = 600, #图片宽度

106 max_font_size = 100, #字体最大值

107 random_state = 100, #配色方案的种类

108 )109 #生成词云图

110 myword =wc.generate(cityStr)111 #展示词云图

112 plt.imshow(myword)113 plt.axis('off')114 plt.show()115 #若文件名非空,则保存到该路径下

116 if CityName != "":117 #保存词云图

118 wc.to_file(CityName)119 print(">>> Creat WeChat wordcloud of city successfully!")120

121 '''===================== 6. 产生province地图 ====================='''122 def creatMapProvince(self, MapFile):123 ''' 使用获取的数据生成province地图 '''124 #获取所有省份

125 provinceList, provinceNum =[], []126 for i inrange(self.allFriends_Num):127 if self.friendsInfo[i][3] not inprovinceList:128 provinceList.append(self.friendsInfo[i][3])129 provinceNum.append(0)130 for i inrange(self.allFriends_Num):131 for j inrange(len(provinceList)):132 if self.friendsInfo[i][3] ==provinceList[j]:133 provinceNum[j] += 1

134 #生成 Map

135 map = Map("各省微信好友分布", width=1000, height=800)136 map.add("", provinceList, provinceNum, maptype="china", is_visualmap=True, visual_text_color='#000')

137 #若文件名非空,则保存到该路径下

138 if MapFile != "":139 #map.show_config()

140 map.render(MapFile)141 print(">>> Creat WeChat Map of Provinces seccessfully!")142

143 '''===================== 7. 产生city地图 ====================='''144 def creatMapCity(self, MapFile):145 ''' 使用获取的数据生成city地图 '''146 #获取所有省份

147 CityList, CityNum =[], []148 for i inrange(self.allFriends_Num):149 if self.friendsInfo[i][4] not inCityList:150 CityList.append(self.friendsInfo[i][4])151 CityNum.append(0)152 for i inrange(self.allFriends_Num):153 for j inrange(len(CityList)):154 if self.friendsInfo[i][4] ==CityList[j]:155 CityNum[j] += 1

156 for i inrange(len(CityList)):157 CityList[i] +='市'158 #生成 Map

159 map = Map("各市微信好友分布", width=1000, height=800)160 map.add("", CityList, CityNum, maptype="广东", is_visualmap=True, visual_text_color='#000')

161 #若文件名非空,则保存到该路径下

162 if MapFile != "":163 map.render(MapFile)164 print(">>> Creat WeChat Map of Cities seccessfully!")165

166 '''===================== 8. 自动执行函数 ====================='''167 def run(self):168 #获取微信好友信息

169 self.getFriendsInfo()170 print(">>> Get WeChat friends' information successfully!")171 print(">>> Members:", self.allFriends_Num)172 #保存微信好友信息

173 self.saveFriendsInfoAsExcel(self.ExcelFile)174 #分析微信好友信息

175 self.quiteAnalyzeFriendsInfo()176 #使用微信好友的 city 产生词云图

177 self.creatWordCloudOfCity(self.WCOfCityFile)178 #生成微信好友的 province 地图

179 self.creatMapProvince(self.MapProvinceFile)180 #生成微信好友的 city 地图

181 self.creatMapCity(self.MapCityFile)182

183 if __name__ == "__main__":184 ToExcelFile = "D:\\python wexin\\微信好友1.xlsx" #微信好友信息的Excel表格保存路径

185 ToPictureFile = "D:\\python wexin\\微信好友2.png" #微信好友信息city词云图保存路径

186 ToMapFileProvince = "D:\\python wexin\\微信好友3.html" #微信好友信息province地图保存路径

187 ToMapFileCity = "D:\\python wexin\\微信好友4.html" #微信好友信息city地图保存路径

188 #WeChatRobot对象实例化

189 robot = WeChatRobot(ToExcelFile, ToPictureFile, ToMapFileProvince, ToMapFileCity)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值