用Python教你如何爬取脉脉职言

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

爬虫

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

网址https://maimai.cn/gossip_list

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

?

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

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

?

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

?

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

欢迎加入我的QQ群`923414804`与我一起学习,群里有我学习过程中整理的大量学习资料。加群即可免费获取

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

?

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

?

直接看的时候有这样的提示会体验很好,但对于爬虫来说就不是很友好了,需要加个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条。

积极

?

消极

?

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

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

?

原文地址:https://www.cnblogs.com/paisenpython/p/10291265.html

时间: 2024-07-29 11:11:44

用Python教你如何爬取脉脉职言的相关文章

Python 爬取 4027 条脉脉职言,解读程序员真实的互联网生活!

脉脉是一个实名职场社交平台.之前爬了脉脉职言版块,大概爬了4027条评论,本文对爬取过程给出详细说明,对于评论内容仅做可视化分析. 爬虫 仍然使用Python编程,对爬虫没兴趣的可直接跳过看下部分,不影响阅读.网址https://maimai.cn/gossip_list,需要先登录才能看到里面的内容. 爬取目标: 只爬文字部分,图片不考虑. 在浏览器内按F12打开开发者,向下滑,会看到很多gossip开头的json文件(不行的话刷新一下). 右键open in new tab,里面是一条一条记

【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可

教你分分钟学会用python爬虫框架Scrapy爬取你想要的内容

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 python爬虫学习课程,下载地址:https://pan.baidu.com/s/1v6ik6YKhmqrqTCICmuceug 课程代码原件:课程视频: 原文地址:http://blog.51cto.com/aino007/2123341

Python编写网页爬虫爬取oj上的代码信息

OJ升级,代码可能会丢失. 所以要事先备份. 一开始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启发和聪神的原始代码, 网页爬虫走起! 已经有段时间没看Python, 这次网页爬虫的原始代码是 python2.7版本, 试了一下修改到3.0版本, 要做很多包的更替,感觉比较烦,所以索性就在这个2.7版本上完善了. 首先观赏一下原始代码,我给加了一些注释: # -*- coding: cp936 -*- import urllib2 import urllib import re import

Python 爬虫入门之爬取妹子图

Python 爬虫入门之爬取妹子图 来源:李英杰  链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob/master/%E7%88%AC%E8%99%AB%E9%9B%86%E5%90%88/meizitu.py 爬虫成果 当你运行代码后,文件夹就会越来越多,如果爬完的话会有2

python爬虫-基础入门-爬取整个网站《3》

python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python2.x 使用类库: >> urllib 库 >> urllib2 库 python3.x 使用的类库: >> urllib 库 变化: -> 在python2.x中使用import urllib2 ----- 对应的,在python3.x 中会使用import url

职场社交软件脉脉职言区最近一个星期在聊什么?

工作之余在学习python,笔者主流语言是php,初学抓取了近来一个星期的脉脉职言区的帖子,现将过程记录如下. 脉脉是一款职场社交软件,大家会在职言区,也就是之前的匿名区去吐槽,但是帖子是登录之后才能看,所以第一步需要python模拟登录 模拟登录 首先在网页上登录,打开开发者工具,会看到一个gossip_list连接,这个就是列表的接口了,参数需要如下 是的,右边的参数就是我们获取数据的时候需要的参数了,cookie信息放在header头里模拟浏览器登录信息,把参数拼接好,去访问,能正常返回数

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

欢迎加入Python学习交流群:535993938  禁止闲聊 ! 名额有限 ! 非喜勿进 ! 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于

Python爬虫教程:爬取付费电影,告别费钱的日子

今天小编再发一篇爬取电影的文章.不是小编懒,是小编真的不知道写什么了,见谅.如果小编Get到新的技能,一定发. 是不是有好多的小伙伴跟好久好久以前的小编一样,看一个电影充个会员,这个没关系,最主要的是,充一个平台的VIP还不行得有好几个才可以. 这么贫穷的小编,当然只能看6分钟的视频了,不过没关系,小编现在有python. 不会小伙伴此刻的心情是:(如同所示) 不过没关系,小编接下来就是授教大家一些Python神技(零基础的也是可以操作的奥)   让咱们首先来看看实现效果吧   把你想要看的VI