前言:
还是有一些朋友联系想整个评论获取,据我所知这方面的单子确实有,但也不值几个元子啊???不过作为宠粉博主,为了构建和谐社会,我还是决定给大伙玩一下,玩一下这个案例!!!(电脑端观看更佳)
动手动手!!!
基本思路:
①接口抓包分析(大佬可以略过)
②拿响应数据(工具构建请求)
③内容解析(想学的可以仔细了解)
④持久化存储 (弄完能站着把元子挣了)
评论留言处理:
1)数据来源分析/接口抓包
- 定位接口抓包 F12 / Fiddler / Postman皆可
随机找个视频 ,进入开发者工具监听数据,深圳天气有点热,我找个凉快点的视频
- 拿到你三舅的留言然后进行搜索,看有没有东西出来,没有就多刷新几次,总得给你个包
- 好基本就是这玩意 检查下是个什么猫腻 什么请求 有没有加密 要不要处理逆向
我先申明一下,看归看不能影响学习
2)发送请求/获取数据
明确之后就开始抓包分析请求了,就是一个Get没啥好说的,payload里面会有x-bogus和mstoken,x-b可加可不加,想拿程序换杯奶茶喝的话最好是加上,mstoekn目前会把他当作一个常量,影响不大。所以一个点,先构建基本请求代码,x-b随你自己。
- 定位到接口复制curl(bash) (图片截错了)然后爬虫工具生成代码(小白建议手写 有一定经验之后可以选择工具)
爬虫工具库:爬虫工具库-spidertools.cn
(拿去玩玩吧)
- 结果的话也没问题就直接去拿了
3)解析数据/数据清洗
提取个人评论留言,获取评论内容、昵称和个人IP地址
- 取值是字典取值,记得用json()打印字典类型数据
--------------------------好的,能看到这里说明基础爬虫没啥问题--------------------------------------
回复留言处理:
上面几个步骤是正常基础爬虫都会去使用的,小白可以留意一下。接下来就正经点,我们首先明确下数据目标:拿到视频全部评论内容
对于一些就十来条的留言,上面这部分拿下来绰绰有余,但如何去拿到几千或者几万条留言,并且在某个留言下面,还有会其他用户回复,这样的类型,又该如何解决。看上去小复杂,但还是一样的操作流程,抓包!
思路还是上面的思路,进入评论里面的回复,然后抓包,进行请求,拿到数据!
基本就是重复了第一套的流程,那么这个时候我们就有了评论留言和回复留言,两个内容。我把回复留言放到了评论的循环下面。于是,有了这种情况。。。。
①处理重复回复-id值
很明显结果不尽人意,这样的操作是为了得到每个评论下的回复,这个时候,咱们就凭借经验来看,肯定每个评论对应的回复有不同的值控制,基本就是个什么id之类的,先确认两个接口的区别。
在评论接口中会有一个cid的值,也是发现这个嫌疑比较大,我尝试进行了取值,然后传给了回复效果立竿见影!
这个时候,我们的数据就有点像模像样了,有评论,也有对应的回复内容。
but 还是有问题!
②回复内容不全-cursor
这回复内容压根不止这三条啊,前面打🐎的图片里面,显示了第一条评论下面有19条回复,对不对!所以!要看看这个是啥原因了!先看接口有没有问题,有没有返回出对应的内容和数据!
我丢?真就三条回复????
我懂了19=3 一定是这样
-------------------------------------------------------------------------------
好,回归主题,我先说清楚,这个程序我写了一年多了,最近才从回收站拿出来,改了两个参数就直接可以跑了,有可能啊,我说有可能,是因为我自己操作频繁了,确实在写博客的中途,有出现验证码拦截(后话再聊)一些客观因素,导致返回的数据包只出现三条没有出现全部。
但是!!!平台这个接口可能就是这样的,对吧,做过视频采集的哥们能察觉这个猫腻!
所以,两个点,我给自己解释下!
Ⅰ. 频繁请求导致反爬,没有数据响应
Ⅱ. 接口他就是这样,只是其余数据展示在新接口当中
----------------------------------------------------------------------------------
情况咋样其实都无所谓,大伙只想看我结果,过程就一般重要...... 我考虑到一个点,是不是数据并没有全部抓完?写爬虫多的同行应该知道,网页上的数据没有出现,但是有接口你就可以用python程序给他全部干下来!!!就问你刑不刑!!!
所以我个人会比较偏向第二种想法,数据出现了,只是他不是一次性全提供19条数据,可以理解为分批次给,好比如你点开回复几百条,他一次性全都展示几百上千条回复嘛???肯定不是,所以
剩余回复数据在其他接口!即合理猜想!!!
很明显,当我开始搜索第四条回复,他给到我一个新的数据包!里面有变化的cursor值,这个就是关键!!!
我假设他是存在的全部回复数据,仅仅是因为没有全部拿出来,我让程序一直帮我拿不就完事?所以死循环就位。但是如何让循环执行呢?我要有个参照值判断,有没有一种可能,网页当中有一个值用来统计评论数量的。
于是,经过我的努力,得到了这么个东东!
reply_comment_total
用他来判断逻辑就是合理的
所以东西不就来了嘛,这块一个小总结,通过对回复数量值的判断,进行循环提取回复量,同时也要加入cursor值,进行传参!简要提一下,Dy视频采集中,每一组数据是20个的标准量,有多有少(18~23的区间)。而这个数据值是由count记录在参数当中,但变化的是cursor这个值。所以我按个人的经验去处理了这个参数!
为了方便大家了解,把今天的这个评论接口给大家分段解释一下!希望诸君能有所收获
总结:
到了这里,相信聪明的你对于全部的评论内容和里面的回复内容的采集有了一定的理解,本文把获取流程详细讲了一遍,拿到了一条评论下的全部回复内容,那么其余的未加载评论如何采集呢,相信你已经有一定思路了。
么错,还是分析评论网站接口,可能搜索第一条评论出现的数据包会有十多条,但后面没有加载出来的评论如何获取?还是根据cursor值来,cursor=0,传入评论接口参数中即可,全部循环获取,直到采集完成。
最终的存储数据我就不去啰嗦了 bye~
祝愿你成为爬虫高手!