Python爬蟲(chóng)實(shí)現(xiàn)“盜取”微信好友信息的方法分析
本文實(shí)例講述了Python爬蟲(chóng)實(shí)現(xiàn)“盜取”微信好友信息的方法。分享給大家供大家參考,具體如下:
剛起床,閑來(lái)無(wú)聊,找點(diǎn)事做,看了朋友圈一篇爬取微信好友信息的文章,突發(fā)奇想,偷偷看看女朋友微信有些啥。。。。于是就下手了。。。。[陰險(xiǎn)]
1、準(zhǔn)備工作:
運(yùn)行平臺(tái):Windows
Python版本:Python3.6
IDE:Sublime Text
Python庫(kù):wxpy,
2、開(kāi)發(fā)流程:(電腦沒(méi)電了,要撐不住了啦~之后具體分析)
3、直接上代碼:
# 微信好友信息爬取+數(shù)據(jù)可視化 # encoding=utf-8 __author__ = 'Jonny' __location__ = '濟(jì)南' __date__ = '2018-06-02' from wxpy import * import re import jieba import numpy import pandas as pd import matplotlib.pyplot as plt from scipy.misc import imread from wordcloud import WordCloud,ImageColorGenerator from matplotlib.patches import Polygon from matplotlib.colors import rgb2hex from mpl_toolkits.basemap import B # 微信登錄 def wx_login(): try: #初始化機(jī)器人,掃碼登錄 bot = Bot() #獲取好友列表 frinds = bot.friends() #wxpy.api.chats.chats.Chats對(duì)象是多個(gè)聊天對(duì)象的合集, # 可用于搜索或統(tǒng)計(jì),可以搜索和統(tǒng)計(jì)的信息包括sex(性別)、province(省份)、city(城市)和signature(個(gè)性簽名)等 print(type(frinds)) #輸出好友列表 for i in frinds: print(i) except Exception as e: print(e.args) wx_login() return frinds # 數(shù)據(jù)可視化 #統(tǒng)計(jì)男女性別信息 def wx_friend_sex_infor(friends): sex_dict = {'male':0,'female':0,'other':0} for friend in friends: if friend.sex == 1: sex_dict['male'] += 1 elif friend.sex == 2: sex_dict['female'] += 1 else: print(friend,'性別未標(biāo)記!') sex_dict['other'] += 1 print(sex_dict) wx_show_sex_infor(sex_dict) # pie(x, explode=None, labels=None, # colors=('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'), # autopct=None, pctdistance=0.6, shadow=False, # labeldistance=1.1, startangle=None, radius=None, # counterclock=True, wedgeprops=None, textprops=None, # center = (0, 0), frame = False ) # 參數(shù)說(shuō)明 # x (每一塊)的比例,如果sum(x) > 1會(huì)使用sum(x)歸一化 # labels (每一塊)餅圖外側(cè)顯示的說(shuō)明文字 # explode (每一塊)離開(kāi)中心距離 # startangle 起始繪制角度,默認(rèn)圖是從x軸正方向逆時(shí)針畫(huà)起,如設(shè)定=90則從y軸正方向畫(huà)起 # shadow 是否陰影 # labeldistance label繪制位置,相對(duì)于半徑的比例, 如<1則繪制在餅圖內(nèi)側(cè) # autopct 控制餅圖內(nèi)百分比設(shè)置,可以使用format字符串或者format function # '%1.1f'指小數(shù)點(diǎn)前后位數(shù)(沒(méi)有用空格補(bǔ)齊) # pctdistance 類似于labeldistance,指定autopct的位置刻度 # radius 控制餅圖半徑 # 返回值: # 如果沒(méi)有設(shè)置autopct,返回(patches, texts) # 如果設(shè)置autopct,返回(patches, texts, autotexts) def wx_show_sex_infor(data): labers = ['男性','女性','未標(biāo)記'] data = [data['male'],data['female'],data['other']] plt.pie(data=data,labels=labers,autopct='%.2f',shadow=True) plt.show() plt.savefig('sex.jpg') plt.close() def wx_friend_location_infor(friends): loction_dict = {'北京': 0, '上海': 0, '天津': 0, '重慶': 0, '河北': 0, '山西': 0, '吉林': 0, '遼寧': 0, '黑龍江': 0, '陜西': 0, '甘肅': 0, '青海': 0, '山東': 0, '福建': 0, '浙江': 0, '臺(tái)灣': 0, '河南': 0, '湖北': 0, '湖南': 0, '江西': 0, '江蘇': 0, '安徽': 0, '廣東': 0, '海南': 0, '四川': 0, '貴州': 0, '云南': 0, '內(nèi)蒙古': 0, '新疆': 0, '寧夏': 0, '廣西': 0, '西藏': 0, '香港': 0, '澳門(mén)': 0} for friend in friends: if friend.province in loction_dict.keys(): loction_dict[friend.province] += 1 #轉(zhuǎn)成JSON格式: loction_list = [] for key,value in loction_dict.items(): loction_list.append({'name':key,'sum':value}) print(loction_list) def wx_show_location_infor(): pass #顯示好友個(gè)簽信息 def wx_show_signature(friends): #統(tǒng)計(jì)好友簽名 for friend in friends: #對(duì)數(shù)據(jù)進(jìn)行清洗,排除標(biāo)點(diǎn)信息的干擾 pattern = re.compile(r'[一-龥](méi)+') filterdata = re.findall(pattern,friend.signature) with open('signature.txt','a',encoding='utf-8',newline='') as f: f.write(str(friend)+''.join(filterdata)+'\n') f.close() # 讀取文件數(shù)據(jù) with open('signature.txt','r',encoding='utf-8',newline='') as f: content = f.read() f.close() segment = jieba.lcut(content) words_df = pd.DataFrame({'segment':segment}) #讀取stopwords stopwords = pd.read_csv('stopwords.txt',index_col=False,quoting=3,sep=' ',names=['stopword'],encoding='gb18030') words_df = words_df[~words_df.segment.isin(stopwords.stopword)] print(words_df) words_stat = words_df.groupby(by=['segment'])['segment'].agg({'計(jì)數(shù)':numpy.size}) words_stat = words_stat.reset_index().sort_values(by=['計(jì)數(shù)'],ascending=False) #設(shè)置詞云屬性 color_mask = imread('background.jpg') wordcloud = WordCloud(font_path='simhei.ttf', #設(shè)置字體可以顯示中文 background_color= 'white', #背景顏色是白色 max_words=1000, #設(shè)置詞云顯示的最大詞數(shù) mask=color_mask, #設(shè)置背景圖片 max_font_size=400, #設(shè)置詞云中字體的最大值 random_state=42, width=500,height=430,margin=2,#設(shè)置圖片默認(rèn)大小 ) # 生成詞云, 可以用generate輸入全部文本,也可以我們計(jì)算好詞頻后使用generate_from_frequencies函數(shù) word_frequence = {x[0]: x[1] for x in words_stat.head(100).values} print(word_frequence) word_frequence_dict = {} for key in word_frequence: word_frequence_dict[key] = word_frequence[key] wordcloud.generate_from_frequencies(word_frequence_dict) # 從背景圖片生成顏色值 image_colors = ImageColorGenerator(color_mask) # 重新上色 wordcloud.recolor(color_func=image_colors) # 保存圖片 wordcloud.to_file('output.png') plt.imshow(wordcloud) plt.axis("off") plt.show() plt.close() if __name__ == '__main__': friends = wx_login() print('~~~~~~~~~~~~~~~~~~~~1~~~~~~~~~~~~~~~~~~~~~~~~~~~~') wx_friend_sex_infor(friends) print('~~~~~~~~~~~~~~~~~~~~~2~~~~~~~~~~~~~~~~~~~~~~~~~~~') wx_friend_location_infor(friends) print('~~~~~~~~~~~~~~~~~~~~~~3~~~~~~~~~~~~~~~~~~~~~~~~~~') wx_show_signature(friends) print('~~~~~~~~~~~~~~~~~~~~~~~4~~~~~~~~~~~~~~~~~~~~~~~~~')
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- python爬蟲(chóng)_微信公眾號(hào)推送信息爬取的實(shí)例
- Python 微信爬蟲(chóng)完整實(shí)例【單線程與多線程】
- python3之微信文章爬蟲(chóng)實(shí)例講解
- python3簡(jiǎn)單實(shí)現(xiàn)微信爬蟲(chóng)
- python爬蟲(chóng)使用正則爬取網(wǎng)站的實(shí)現(xiàn)
- Python爬蟲(chóng)之爬取淘女郎照片示例詳解
- Python爬蟲(chóng)實(shí)例——爬取美團(tuán)美食數(shù)據(jù)
- Python爬蟲(chóng)實(shí)例——scrapy框架爬取拉勾網(wǎng)招聘信息
- Python爬蟲(chóng)爬取百度搜索內(nèi)容代碼實(shí)例
- python爬蟲(chóng)開(kāi)發(fā)之使用python爬蟲(chóng)庫(kù)requests,urllib與今日頭條搜索功能爬取搜索內(nèi)容實(shí)例
- python爬蟲(chóng)爬取筆趣網(wǎng)小說(shuō)網(wǎng)站過(guò)程圖解
- Python爬蟲(chóng)爬取微信朋友圈
相關(guān)文章
pytorch交叉熵?fù)p失函數(shù)的weight參數(shù)的使用
這篇文章主要介紹了pytorch交叉熵?fù)p失函數(shù)的weight參數(shù)的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05PyQt5實(shí)現(xiàn)無(wú)邊框窗口的標(biāo)題拖動(dòng)和窗口縮放
這篇文章主要為大家詳細(xì)介紹了PyQt5實(shí)現(xiàn)無(wú)邊框窗口的標(biāo)題拖動(dòng)和窗口縮放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04深度學(xué)習(xí)環(huán)境配置之Anaconda安裝和pip源方式
這篇文章主要介紹了深度學(xué)習(xí)環(huán)境配置之Anaconda安裝和pip源方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02使用Keras訓(xùn)練好的.h5模型來(lái)測(cè)試一個(gè)實(shí)例
這篇文章主要介紹了使用Keras訓(xùn)練好的.h5模型來(lái)測(cè)試一個(gè)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07PYQT5開(kāi)啟多個(gè)線程和窗口,多線程與多窗口的交互實(shí)例
今天小編就為大家分享一篇PYQT5開(kāi)啟多個(gè)線程和窗口,多線程與多窗口的交互實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12python numpy中mat和matrix的區(qū)別
這篇文章主要介紹了python numpy中mat和matrix的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03