教大家通过node爬取b站api数据

本文介绍如何使用Node.js抓取B站API数据,以实现跨域获取番剧类目中的番剧索引信息。首先通过浏览器开发者工具定位所需API,然后在Node.js中利用https模块模拟GET请求,获取包括番剧名、图片链接、URL和更新时间在内的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近我打算做一个仿b站页面的项目,打算直接从b站api取数据,然后用ajax请求了一下url发现这个api果然是不支持跨域的,所以我打算通过node.js抓取b站数据搭建服务器来完成这个项目并顺便写了这篇博客。


      下面我将会把自己爬取api的步骤分享给大家,刚开始写博客,思路略有些混乱请大家见谅,博客中若有错误还请严厉指出。


      今天我爬取的页面是b站番剧类目中番剧索引页面中的数据(我是b站粉ヽ(ー_ー)ノ)。



      1、打开番剧索引页面并按F12打开控制台,刷新一下页面,然后到控制台的network中页面将filter设置为XHR

<< 要创建一个用于从Bilibili(B爬取弹幕的工具,我们需要使用到几个关键点:获取视频CID、请求API数据以及解析返回的数据。 ### 步骤一: 获取视频信息与CID 每个视频都有唯一的AV号或BV号,并且对应着至少一个CID。CID是用来区分同一视频的不同分区(例如P1,P2等)。我们首先需要根据视频链接提取出对应的CID。 ```python import requests def get_cid(bv_number): api_url = f"https://api.bilibili.com/x/player/pagelist?bvid={bv_number}&jsonp=jsonp" response = requests.get(api_url) if response.status_code == 200: data = response.json() cid_list = [] for item in data['data']: cid_info = { 'cid':item['cid'], 'name':item['part'] } cid_list.append(cid_info) return cid_list ``` ### 步骤二: 请求弹幕XML文件并解析为字符串列表 接下来就是利用CID去调用弹幕接口拿到原始xml文档再将其转换成易于处理的形式如list(dict)等等... 这里需要注意的是由于新版本可能存在防护机制所以可能直接访问会失败这个时候就需要带上header伪装浏览器行为或者通过更复杂的手段绕过验证(不过这属于灰色地带并不提倡) ```python from xml.dom.minidom import parseString def fetch_danmaku_by_cid(cid, date=None): headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"} # 如果设置了日期参数则按照历史记录模式进行查询否则就抓取当前最新评论 if not date : url=f'https://comment.bilibili.com/{str(cid)}.xml' else : url='https://api.bilibili.com/x/v2/dm/history?type=1&oid='+ str(cid)+ '&date='+date resp=requests.get(url=url ,headers=headers ) dom_tree =parseString(resp.content.decode('utf-8')) danmakus=[] items=dom_tree.getElementsByTagName("d") for i in range(len(items)): node_data=str(items[i].childNodes[0].data).strip() # 弹幕文本内容 time_attr=float(str(items[i].getAttribute('p')).split(',')[0])#出现时间戳 one_dm={'text':node_data,'time':time_attr} danmakus.append(one_dm) return sorted(danmakus,key=lambda k:k["time"]) ``` ### 解释: - **get_cid**: 根据传入的BV号码获取该视频所有的分集及其相应的CID. - **fetch_danmaku_by_cid** : 按照指定的CID拉取相关的所有弹幕数据并且排序输出.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值