脈脈是一個實名職場社交平臺。以前爬了脈脈職言版塊,大概爬了4027條評論,本文對爬取過程給出詳細說明,對於評論內容僅作可視化分析,以前存了一堆這方面的文章,今天一看全都404了html
爬蟲python
仍然使用python編程,對爬蟲沒興趣的能夠直接跳過看下部分,不影響悅讀。程序員
網址https://maimai.cn/gossip_list。web
須要先登陸才能看到裏面的內容。爬取目標:編程
只爬文字部分,圖片不考慮。json
在瀏覽器內按F12打開開發者,向下滑,會看到不少gossip開頭的json文件(不行的話刷新一下)api
右鍵open in new tab,裏面是一條一條記錄,text後面是評論內容。瀏覽器
咱們感興趣的信息是下面這些cookie
歡迎加入個人QQ羣`923414804`與我一塊兒學習,羣裏有我學習過程當中整理的大量學習資料。加羣便可免費獲取app
1. Python編程從入門到實踐.pdf
2. Python編程快速上手——讓繁瑣工做自動化.pdf
3. Python高級編程.pdf
4. Python高性能編程.pdf
5. Python核心編程.第3版.pdf
6. Python極客項目編程.pdf
7. Python數據科學手冊.pdf
8. 貝葉斯思惟:統計建模的PYTHON學習法.pdf
9. 笨辦法學python+第二版.pdf
10.機器學習實戰(掃描版).pdf
11.像計算機科學家同樣思考Python.pdf
12.用Python進行天然語言處理.pdf
....
看一看每一個網站的地址,都是page=數字結尾,因此爬的時候寫一個循環,數字從1開始日後取就能夠了。
https://maimai.cn/sdk/web/gossip_list?u=206793936&channel=www&version=4.0.0&_csrf=coAlLvgS-UogpI75vEgHk4O1OQivF2ofLce4&access_token=1.9ff1c9df8547b2b2c62bf58b28e84b97&uid=%22MRlTFjf812rF62rOeDhC6vAirs3A3wL6ApgZu%2Fo1crA%3D%22&token=%22rE8q1xp6fZlxvwygWJn1UFDjrmMXDrSE2tc6uDKNIDZtRErng0FRwvduckWMwYzn8CKuzcDfAvoCmBm7%2BjVysA%3D%3D%22&page=1&jsononly=1
json的最開頭有total和remain兩個參數,給出了目前全部可見評論剩餘數和總數,能夠做爲循環的中止條件。
但比較坑的一點是,脈脈並不能可見全部評論,並且評論是不斷刷新的,全部若是爬完一頁循環到下一頁或者嘗試過不少次以後,他會提示你:
直接看的時候有這樣的提示會體驗很好,但對於爬蟲來講就不是很友好了,須要加個if判斷。
另外爬的太快,也會出錯,記得加time.sleep。
大概把能踩的坑都踩了,因此若是順利的話,每次只能爬幾百條信息,想爬更多的話,須要過一段時間等信息更新的差很少了再爬,代碼以下
# -*- coding: utf-8 -*- """ Created on Fri Oct 19 18:50:03 2018 """ import urllib import requests from fake_useragent import UserAgent import json import pandas as pd import time import datetime #comment_api = 'https://maimai.cn/sdk/web/gossip_list?u=206793936&channel=www&version=4.0.0&_csrf=7ZRpwOSi-JHa7JrTECXLA8njznQZVbi7d4Uo&access_token=1.b7e3acc5ef86e51a78f3410f99aa642a&uid=%22MRlTFjf812rF62rOeDhC6vAirs3A3wL6ApgZu%2Fo1crA%3D%22&token=%22xoNo1TZ8k28e0JTNFqyxlxg%2BdL%2BY6jtoUjKZwE3ke2IZ919o%2FAUeOvcX2yA03CAx8CKuzcDfAvoCmBm7%2BjVysA%3D%3D%22&page={}&jsononly=1' # 發送get請求 comment_api = 'https://maimai.cn/sdk/web/gossip_list?u=206793936&channel=www&version=4.0.0&_csrf=FfHZIyBb-H4LEs35NcyhyoAvRM7OkMRB0Jpo&access_token=1.0d4c87c687410a15810ee6304e1cd53b&uid=%22MRlTFjf812rF62rOeDhC6vAirs3A3wL6ApgZu%2Fo1crA%3D%22&token=%22G7rGLEqmm1wY0HP4q%2BxpPFCDj%2BHqGJFm0mSa%2BxpqPg47egJdXL%2FriMlMlHuQj%2BgM8CKuzcDfAvoCmBm7%2BjVysA%3D%3D%22&page={}&jsononly=1' """ author:做者 text:評論 cmts :評論數 circles_views:被查看數 spread :轉發數 likes :點贊數 time : 時間 """ headers = { "User-Agent": UserAgent(verify_ssl=False).random} j = 0 k = 0 response_comment = requests.get(comment_api.format(0),headers = headers) json_comment = response_comment.text json_comment = json.loads(json_comment) num = json_comment['total'] cols = ['author','text','cmts','likes','circles_views','spreads','time'] dataall = pd.DataFrame(index = range(num),columns = cols) remain = json_comment['remain'] print(remain) while remain!= 0 : n = json_comment['count'] for i in range(n): if json_comment['data'][i]['text'] !='下面內容已經看過了,點此刷新': dataall.loc[j,'author'] = json_comment['data'][i]['author'] dataall.loc[j,'text'] = json_comment['data'][i]['text'] dataall.loc[j,'cmts'] = json_comment['data'][i]['cmts'] dataall.loc[j,'likes'] = json_comment['data'][i]['likes'] dataall.loc[j,'circles_views'] = json_comment['data'][i]['circles_views'] dataall.loc[j,'spreads'] = json_comment['data'][i]['spreads'] dataall.loc[j,'time'] = json_comment['data'][i]['time'] j+= 1 else: k = -1 break k+= 1 comment_api1 = comment_api.format(k) response_comment = requests.get(comment_api1,headers = headers) json_comment = response_comment.text json_comment = json.loads(json_comment) remain = json_comment['remain'] print('已完成 {}% !'.format(round(j/num*100,2))) time.sleep(3) dataall = dataall.dropna() dataall = dataall.drop_duplicates() dataall.to_csv('data_20181216_part3.csv',index = False)
數據可視化
就這樣斷斷續續爬了一堆文件去重以後,獲得了4027條數據,格式以下
接下來對爬到的數據作一些簡單的分析。由於並不沒有爬到全量評論,只是一個小樣本,因此結果確定是有偏的,但爬的時間很隨機,並且前先後後爬了兩週多,這樣選樣也比較隨機,仍是有必定的表明性。
脈脈中發言用戶有兩類,一類是徹底匿名的,用系統生成的暱稱,一類顯示爲xx公司員工,咱們統計爬到的樣本中這兩種用戶的數量及發帖量。4027條職言中,不一樣發帖人共計1100名。
匿名發帖人超過70%,你們都並不肯意用真實身份發言,畢竟被公司/學校人肉風險仍是很高的。
發帖數也毫無心外,匿名發帖人貢獻了85%以上的帖子。
匿名發帖人沒法獲取更細緻的數據,但對於那些不匿名的發帖人,能夠獲取他們所在公司 信息,將發帖數按公司彙總,看各大企業發帖量,能夠做爲總體的一個估計。統計時已經考慮了公司名稱輸入不一致的狀況,將螞蟻金服、支付寶等替換成了阿里巴巴,京東金融等替換成京東,今日頭條、抖音等替換爲字節跳動,取發帖數TOP20。
能夠看到,發帖人大多來自互聯網企業,金融、地產等其餘企業相對較少。
文本分析
對於轉發、評論數、點贊數,由於有爬取時間上的差別,因此很差直接比較,給出評論數最多的前5條評論,看看你們最願意參與的話題是什麼。
1. 用一個字歸納一下你的2018年。(1659條評論)
2. 【再就業求助帖】本人是剛被優化掉的知乎程序員,工做3年。比較想去BAT等大廠,但願貴廠HR們帶公司認證來回復一下,發一發真實有hc的崗位,祝願兄弟們都能找到新工做。(610條評論)
3. 用兩個字歸納你如今的工做。(477條評論)
4. 網易漲今年薪漲了50%.....公司是發財了嗎?(458條評論)
5. 用2個字總結你的工做。(415條評論)
1,4,5都是蠻有意思的問題,咱們把1,4,5的評論都爬下來,作成詞雲,看看你們都在說些什麼。
用一個字歸納你的2018年
爬蟲過程跟上面基本是同樣的,找到json,不過這個能夠爬到所有評論。
# -*- coding: utf-8 -*- """ Created on Fri Oct 19 18:50:03 2018 """ import urllib import requests from fake_useragent import UserAgent import json import pandas as pd import time # 發送get請求 comment_api = 'https://maimai.cn/sdk/web/gossip/getcmts?gid=18606987&page={}&count=50&hotcmts_limit_count=1&u=206793936&channel=www&version=4.0.0&_csrf=38244DlN-X0iNIk6A4seLXFx6hz3Ds6wfQ0Y&access_token=1.9ff1c9df8547b2b2c62bf58b28e84b97&uid=%22MRlTFjf812rF62rOeDhC6vAirs3A3wL6ApgZu%2Fo1crA%3D%22&token=%22rE8q1xp6fZlxvwygWJn1UFDjrmMXDrSE2tc6uDKNIDZtRErng0FRwvduckWMwYzn8CKuzcDfAvoCmBm7%2BjVysA%3D%3D%22' """ author:做者 text:評論 、 """ #headers = { "User-Agent": UserAgent(verify_ssl=False).random,'Cookie':cookie} headers = { "User-Agent": UserAgent(verify_ssl=False).random} j = 0 k = 0 response_comment = requests.get(comment_api.format(0),headers = headers) json_comment = response_comment.text json_comment = json.loads(json_comment) num = json_comment['total'] cols = ['author','text'] dataall = pd.DataFrame(index = range(num),columns = cols) while j < num : n = json_comment['count'] for i in range(n): dataall.loc[j,'author'] = json_comment['comments'][i]['name'] dataall.loc[j,'text'] = json_comment['comments'][i]['text'] j+= 1 k += 1 comment_api1 = comment_api.format(k) response_comment = requests.get(comment_api1,headers = headers) json_comment = response_comment.text json_comment = json.loads(json_comment) print('已完成 {}% !'.format(round(j/num*100,2))) time.sleep(3) dataall.to_excel('用一個字歸納你的2018年.xlsx')
爬下來以後,刪掉超過一個字的評論,按詞頻肯定大小,作詞雲圖以下
用兩個字歸納你如今的工做|用2個字總結你的工做
2,5是同樣的,爬下來合併到一塊兒後分析。代碼再也不重複,實際上用上面那段代碼,找到json地址後替換,任何一個話題下的評論均可以全爬到,刪掉不是2個字的評論後根據詞頻做圖。
使用SnowNLP對評論進行情感分析,最終4027條中,積極的有2196條,消極的有1831條。
積極
消極
模型對大部分評論的情感傾向判斷的比較準確,小部分有誤。
最後對全部評論提取關鍵詞作詞雲收尾。