首页>软件资讯>常见问题

常见问题

Fiddler的应用-爬取b站视频评论

发布时间:2022-11-22 10:10:13人气:367

在爬虫开发的过程中,一般情况下我们用浏览器自带的抓包工具即可完成分析,即按住F12后进入的开发者模式,但在开发者模式中,有些数据并没有抓得那么全,无法抓取到所有我们想要的数据,这个时候我们就要借助专业的抓包工具了,下面我们就用Fiddler抓取b站视频评论为例,简单讲解Fiddler的应用。


Fiddler 是一个 http 调试代理,它能够记录所有的你电脑和互联网之间的 http 通讯,Fiddler 可以也可以让你检查所有的 http 通讯,设置断点,以及 Fiddle 所有的 “进出” 的数据(如 cookie,html,js,css 等文件)。Fiddler 要比其他的网络调试器要更加简单,因为它仅仅暴露 http 通讯还有提供一个用户友好的格式。联系本站客服在网上下载安装即可,安装完成后打开的是这样的一个界面:


Fiddler的应用-爬取b站视频评论.png


打开b站视频评论区,发现评论同样是Ajax动态加载的,在加载出的数据中,发现一个名为main?csrf...的包,点击进去,在预览下的data中发现replies,点开后发现正是加载出的评论。


2.png


点开其中一条评论,发现在这个包中只提供了评论中可见的子评论,‘点击查看’的其他子评论获取不到,XHR中也没有捕获到新的包。


3.png


这个时候就该我们的Fiddler登场了,看看能不能抓到更多我们所需的包,打开Fiddler后,点击‘查看更多’,可以发现Fiddler会刷新出一组包,找到Host为api.bilibili.com的包,在浏览器的开发者模式中,我们可以发现评论是Json数据,所以选择api.bilibili.com包中的Json,在data中,我们打开replies,可以发现加载出的子评论。


4.png


点击进去,展开后发现确实是加载出的隐藏子评论:


5.png


复制子评论包的url:


https://api.bilibili.com/x/v2/reply/reply?csrf=0329e0b73103f5e307b6a8bd5e212ff2&oid=69241910&pn=1&ps=10&root=1991252104&type=1

Fiddler的应用-爬取b站视频评论.png


经对比分析发现只有pn参数和root参数不同,pn参数为子评论页数,root则与父评论的rpid相同,因此,我们可以请求父评论URL:


Fiddler的应用-爬取b站视频评论.png


https://api.bilibili.com/x/v2/reply/main?csrf=0329e0b73103f5e307b6a8bd5e212ff2&mode=3&next=2&oid=69241910&plat=1&type=1


经分析父URL也只有pn参数不同,pn代表页数,即只需在循环中改变pn变量即可。请求成功后提取父评论以及它所携带的rpid,提取后的rpid传参给子URL的root后对子URL发起请求即可获得子评论的所有内容。


#由于不知道具体的页数,写个死循环:


while True:

response = requests.get(url, headers=headers, verify=False)

    response.encoding = 'utf-8'

    Json_data = response.json()['data']['replies']

if len(Json_data) == 0:#当Json_data为空时退出循环

break

#提取父评论以及子评论所需的rpid

   for node in jp.Json_data:

         rpid = node['rpid']

         content = node['content']['message']


    # 如果有子评论,爬取子评论

    if node['replies'] is not None:

          #传rpid给请求子评论URL所在的函数即可

        getSonReplies(rpid)


至此,我们获取了b站视频的所有评论,根据需要选择相应的存储方式进行存储即可,在实际爬取过程中注意设置等待时间,避免请求频率过快被b站屏蔽。



上一条:Minitab21版本介绍

下一条:Fiddler-Inspectors