溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何爬取 4027 條脈脈職言

發(fā)布時間:2021-10-25 17:19:26 來源:億速云 閱讀:127 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關Python如何爬取 4027 條脈脈職言,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

脈脈是一個實名職場社交平臺。之前爬了脈脈職言版塊,大概爬了4027條評論,本文對爬取過程給出詳細說明,對于評論內容僅做可視化分析。

爬蟲

仍然使用Python編程,對爬蟲沒興趣的可直接跳過看下部分,不影響閱讀。網(wǎng)址https://maimai.cn/gossip_list,需要先登錄才能看到里面的內容。

爬取目標:

Python如何爬取 4027 條脈脈職言

只爬文字部分,圖片不考慮。

在瀏覽器內按F12打開開發(fā)者,向下滑,會看到很多gossip開頭的json文件(不行的話刷新一下)。

Python如何爬取 4027 條脈脈職言

右鍵open in new tab,里面是一條一條記錄,text后面是評論內容。

Python如何爬取 4027 條脈脈職言

我們感興趣的信息是下面這些:

Python如何爬取 4027 條脈脈職言

看一看每個網(wǎng)站的地址,都是page=數(shù)字結尾,所以爬的時候寫一個循環(huán),數(shù)字從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兩個參數(shù),給出了目前所有可見評論剩余數(shù)和總數(shù),可以作為循環(huán)的停止條件。

Python如何爬取 4027 條脈脈職言

但比較坑的一點是,脈脈并不能可見所有評論,而且評論是不斷刷新的,所有如果爬完一頁循環(huán)到下一頁或者嘗試過很多次之后,它會提示你:

Python如何爬取 4027 條脈脈職言

直接看的時候有這樣的提示會體驗很好,但對于爬蟲來說就不是很友好了,需要加個if判斷。

另外爬得太快,也會出錯,記得加time.sleep。

Python如何爬取 4027 條脈脈職言

大概把能踩的坑都踩了,所以如果順利的話,每次只能爬幾百條信息,想爬更多的話,需要過一段時間等信息更新的差不多了再爬,代碼如下:

# -*- 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'
# 發(fā)送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 :評論數(shù)
circles_views:被查看數(shù)
spread :轉發(fā)數(shù)
likes :點贊數(shù)
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'] !='下面內容已經(jīng)看過了,點此刷新':
           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)

數(shù)據(jù)可視化

就這樣斷斷續(xù)續(xù)爬了一堆文件去重之后,得到了4027條數(shù)據(jù),格式如下:

Python如何爬取 4027 條脈脈職言

接下來對爬到的數(shù)據(jù)做一些簡單的分析。因為并不沒有爬到全量評論,只是一個小樣本,所以結果肯定是有偏的,但爬的時間很隨機,而且前前后后爬了兩周多,這樣選樣也比較隨機,還是有一定的代表性。

脈脈中發(fā)言用戶有兩類,一類是完全匿名的,用系統(tǒng)生成的昵稱,一類顯示為xx公司員工,我們統(tǒng)計爬到的樣本中這兩種用戶的數(shù)量及發(fā)帖量。4027條職言中,不同發(fā)帖人共計1100名。

Python如何爬取 4027 條脈脈職言

匿名發(fā)帖人超過70%,大家都并不愿意用真實身份發(fā)言,畢竟被公司/學校人肉風險還是很高的。

Python如何爬取 4027 條脈脈職言

發(fā)帖數(shù)也毫無意外,匿名發(fā)帖人貢獻了85%以上的帖子。

匿名發(fā)帖人無法獲取更細致的數(shù)據(jù),但對于那些不匿名的發(fā)帖人,可以獲取他們所在公司信息,將發(fā)帖數(shù)按公司匯總,看各大企業(yè)發(fā)帖量,可以作為整體的一個估計。統(tǒng)計時已經(jīng)考慮了公司名稱輸入不一致的情況,將螞蟻金服、支付寶等替換成了阿里巴巴,京東金融等替換成京東,今日頭條、抖音等替換為字節(jié)跳動,取發(fā)帖數(shù)TOP20。

Python如何爬取 4027 條脈脈職言

可以看到,發(fā)帖人大多來自互聯(lián)網(wǎng)企業(yè),金融、地產(chǎn)等其他企業(yè)相對較少。

文本分析

對于轉發(fā)、評論數(shù)、點贊數(shù),因為有爬取時間上的差異,所以不好直接比較,給出評論數(shù)最多的前5條評論,看看大家最愿意參與的話題是什么。

1. 用一個字概括一下你的2018年。(1659條評論)

2. 【再就業(yè)求助帖】本人是剛被優(yōu)化掉的知乎程序員,工作3年。比較想去BAT等大廠,希望貴廠HR們帶公司認證來回復一下,發(fā)一發(fā)真實有hc的崗位,祝愿兄弟們都能找到新工作。(610條評論)

3. 用兩個字概括你現(xiàn)在的工作。(477條評論)

4. 網(wǎng)易漲今年薪漲了50%.....公司是發(fā)財了嗎?(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
# 發(fā)送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')

爬下來之后,刪掉超過一個字的評論,按詞頻確定大小,做詞云圖如下:

Python如何爬取 4027 條脈脈職言

用兩個字概括你現(xiàn)在的工作/用2個字總結你的工作

2、5是一樣的,爬下來合并到一起后分析。代碼不再重復,實際上用上面那段代碼,找到json地址后替換,任何一個話題下的評論都可以全爬到,刪掉不是2個字的評論后根據(jù)詞頻作圖:

Python如何爬取 4027 條脈脈職言

使用SnowNLP對評論進行情感分析,最終4027條中,積極的有2196條,消極的有1831條。

積極:

Python如何爬取 4027 條脈脈職言

消極:

Python如何爬取 4027 條脈脈職言

模型對大部分評論的情感傾向判斷的比較準確,小部分有誤。

最后對所有評論提取關鍵詞做詞云收尾:

Python如何爬取 4027 條脈脈職言

以上就是Python如何爬取 4027 條脈脈職言,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI