Python爬取4027条脉脉职言,解读互联网人的苦与难!

开发 后端 大数据
脉脉是一个实名职场社交平台。之前爬了脉脉职言版块,大概爬了4027条评论,本文对爬取过程给出详细说明,对于评论内容仅做可视化分析,之前存了一堆这方面的文章,今天一看全都404了”。

脉脉是一个实名职场社交平台。之前爬了脉脉职言版块,大概爬了4027条评论,本文对爬取过程给出详细说明,对于评论内容仅做可视化分析,之前存了一堆这方面的文章,今天一看全都404了”。

爬虫

仍然使用python编程,对爬虫没兴趣的可以直接跳过看下部分,不影响悦读。

网址https://maimai.cn/gossip_list。

需要先登录才能看到里面的内容。爬取目标:

Python爬取4027条脉脉职言,解读互联网人的苦与难!

只爬文字部分,图片不考虑。

在浏览器内按F12打开开发者,向下滑,会看到很多gossip开头的json文件(不行的话刷新一下)

Python爬取4027条脉脉职言,解读互联网人的苦与难!

右键open in new tab,里面是一条一条记录,text后面是评论内容。

Python爬取4027条脉脉职言,解读互联网人的苦与难!

我们感兴趣的信息是下面这些

Python爬取4027条脉脉职言,解读互联网人的苦与难!

看一看每个网站的地址,都是page=数字结尾,所以爬的时候写一个循环,数字从1开始往后取就可以了。

  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两个参数,给出了目前所有可见评论剩余数和总数,可以作为循环的停止条件。

Python爬取4027条脉脉职言,解读互联网人的苦与难!

但比较坑的一点是,脉脉并不能可见所有评论,而且评论是不断刷新的,所有如果爬完一页循环到下一页或者尝试过很多次之后,他会提示你:

Python爬取4027条脉脉职言,解读互联网人的苦与难!

直接看的时候有这样的提示会体验很好,但对于爬虫来说就不是很友好了,需要加个if判断。

另外爬的太快,也会出错,记得加time.sleep。

Python爬取4027条脉脉职言,解读互联网人的苦与难!

大概把能踩的坑都踩了,所以如果顺利的话,每次只能爬几百条信息,想爬更多的话,需要过一段时间等信息更新的差不多了再爬,代码如下

  1. # -*- coding: utf-8 -*- 
  2. ""
  3. Created on Fri Oct 19 18:50:03 2018 
  4. ""
  5. import urllib 
  6. import requests 
  7. from fake_useragent import UserAgent 
  8. import json 
  9. import pandas as pd 
  10. import time 
  11. import datetime 
  12. #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' 
  13. # 发送get请求 
  14. 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' 
  15. ""
  16. author:作者 
  17. text:评论 
  18. cmts :评论数 
  19. circles_views:被查看数 
  20. spread :转发数 
  21. likes :点赞数 
  22. time : 时间 
  23.  
  24. ""
  25.  
  26.  
  27. headers = { "User-Agent": UserAgent(verify_ssl=False).random} 
  28. j = 0 
  29. k = 0 
  30. response_comment = requests.get(comment_api.format(0),headers = headers) 
  31. json_comment = response_comment.text 
  32. json_comment = json.loads(json_comment) 
  33. num = json_comment['total'
  34. cols = ['author','text','cmts','likes','circles_views','spreads','time'
  35. dataall = pd.DataFrame(index = range(num),columns = cols) 
  36. remain = json_comment['remain'
  37. print(remain) 
  38. while remain!= 0 : 
  39.    n = json_comment['count'
  40.    for i in range(n): 
  41.        if json_comment['data'][i]['text'] !='下面内容已经看过了,点此刷新'
  42.            dataall.loc[j,'author'] = json_comment['data'][i]['author'
  43.            dataall.loc[j,'text'] = json_comment['data'][i]['text'
  44.            dataall.loc[j,'cmts'] = json_comment['data'][i]['cmts'
  45.            dataall.loc[j,'likes'] = json_comment['data'][i]['likes'
  46.            dataall.loc[j,'circles_views'] = json_comment['data'][i]['circles_views'
  47.            dataall.loc[j,'spreads'] = json_comment['data'][i]['spreads'
  48.            dataall.loc[j,'time'] = json_comment['data'][i]['time'
  49.  
  50.            j+= 1              
  51.        else
  52.            k = -1     
  53.            break                              
  54.    k+= 1 
  55.    comment_api1 = comment_api.format(k)     
  56.    response_comment = requests.get(comment_api1,headers = headers) 
  57.    json_comment = response_comment.text 
  58.    json_comment = json.loads(json_comment) 
  59.    remain = json_comment['remain'
  60.    print('已完成 {}% !'.format(round(j/num*100,2))) 
  61.    time.sleep(3)           
  62. dataall = dataall.dropna() 
  63. dataall = dataall.drop_duplicates() 
  64.  
  65. dataall.to_csv('data_20181216_part3.csv',index = False

数据可视化

就这样断断续续爬了一堆文件去重之后,得到了4027条数据,格式如下

Python爬取4027条脉脉职言,解读互联网人的苦与难!

接下来对爬到的数据做一些简单的分析。因为并不没有爬到全量评论,只是一个小样本,所以结果肯定是有偏的,但爬的时间很随机,而且前前后后爬了两周多,这样选样也比较随机,还是有一定的代表性。

脉脉中发言用户有两类,一类是完全匿名的,用系统生成的昵称,一类显示为xx公司员工,我们统计爬到的样本中这两种用户的数量及发帖量。4027条职言中,不同发帖人共计1100名。

Python爬取4027条脉脉职言,解读互联网人的苦与难!

匿名发帖人超过70%,大家都并不愿意用真实身份发言,毕竟被公司/学校人肉风险还是很高的。

Python爬取4027条脉脉职言,解读互联网人的苦与难!

发帖数也毫无意外,匿名发帖人贡献了85%以上的帖子。

匿名发帖人无法获取更细致的数据,但对于那些不匿名的发帖人,可以获取他们所在公司 信息,将发帖数按公司汇总,看各大企业发帖量,可以作为整体的一个估计。统计时已经考虑了公司名称输入不一致的情况,将蚂蚁金服、支付宝等替换成了阿里巴巴,京东金融等替换成京东,今日头条、抖音等替换为字节跳动,取发帖数TOP20。

Python爬取4027条脉脉职言,解读互联网人的苦与难!

可以看到,发帖人大多来自互联网企业,金融、地产等其他企业相对较少。

文本分析

对于转发、评论数、点赞数,因为有爬取时间上的差异,所以不好直接比较,给出评论数最多的前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,不过这个可以爬到全部评论。

  1. # -*- coding: utf-8 -*- 
  2. ""
  3. Created on Fri Oct 19 18:50:03 2018 
  4. ""
  5. import urllib 
  6. import requests 
  7. from fake_useragent import UserAgent 
  8. import json 
  9. import pandas as pd 
  10. import time 
  11. # 发送get请求 
  12. 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' 
  13. ""
  14. author:作者 
  15. text:评论 
  16. 、 
  17.  
  18. ""
  19.  
  20.  
  21. #headers = { "User-Agent": UserAgent(verify_ssl=False).random,'Cookie':cookie} 
  22. headers = { "User-Agent": UserAgent(verify_ssl=False).random} 
  23. j = 0 
  24. k = 0 
  25. response_comment = requests.get(comment_api.format(0),headers = headers) 
  26. json_comment = response_comment.text 
  27. json_comment = json.loads(json_comment) 
  28.  
  29.  
  30. num = json_comment['total'
  31. cols = ['author','text'
  32. dataall = pd.DataFrame(index = range(num),columns = cols) 
  33.  
  34. while j < num : 
  35.    n = json_comment['count'
  36.    for i in range(n): 
  37.  
  38.        dataall.loc[j,'author'] = json_comment['comments'][i]['name'
  39.        dataall.loc[j,'text'] = json_comment['comments'][i]['text'
  40.        j+= 1              
  41.    k += 1 
  42.    comment_api1 = comment_api.format(k)  
  43.     
  44.    response_comment = requests.get(comment_api1,headers = headers) 
  45.    json_comment = response_comment.text 
  46.    json_comment = json.loads(json_comment) 
  47.    print('已完成 {}% !'.format(round(j/num*100,2))) 
  48.    time.sleep(3) 
  49.     
  50.          
  51. dataall.to_excel('用一个字概括你的2018年.xlsx'

爬下来之后,删掉超过一个字的评论,按词频确定大小,做词云图如下

[[256539]]

用两个字概括你现在的工作|用2个字总结你的工作

2,5是一样的,爬下来合并到一起后分析。代码不再重复,实际上用上面那段代码,找到json地址后替换,任何一个话题下的评论都可以全爬到,删掉不是2个字的评论后根据词频作图。

Python爬取4027条脉脉职言,解读互联网人的苦与难!

使用SnowNLP对评论进行情感分析,最终4027条中,积极的有2196条,消极的有1831条。

积极

Python爬取4027条脉脉职言,解读互联网人的苦与难!

消极

Python爬取4027条脉脉职言,解读互联网人的苦与难!

模型对大部分评论的情感倾向判断的比较准确,小部分有误。

***对所有评论提取关键词做词云收尾。

Python爬取4027条脉脉职言,解读互联网人的苦与难!

责任编辑:未丽燕 来源: 量化小白上分记
相关推荐

2020-08-03 09:22:19

互联网数据技术

2019-12-11 15:05:27

互联网IT云计算

2013-08-14 11:03:35

2020-08-23 11:50:58

互联网数据技术

2019-03-20 10:10:17

互联网数据技术

2022-05-27 15:35:17

互联网职场安全感

2015-08-10 11:09:54

云测快码

2019-09-09 09:29:27

互联网程序员职业

2015-03-03 10:54:31

2018-08-15 09:02:59

产业互联网工业互联网物联网

2020-03-03 15:45:08

互联网求职行业从业者

2018-11-30 10:59:49

2020-06-04 15:03:27

摆地摊互联网风口

2022-08-03 13:56:10

互联网跳槽

2019-05-23 15:29:25

互联网数据技术

2019-04-15 09:14:19

互联网人潜台词黑话

2010-05-14 15:35:21

2017-08-03 16:37:35

互联网法院司法

2019-12-30 10:32:10

CSS设计SQL

2019-09-06 16:57:02

跳槽那些事儿程序员技术
点赞
收藏

51CTO技术栈公众号