C# B站的弹幕提取
要知道B站的弹幕位置
如果只考虑视频,B站的链接格式为:https://www.bilibili.com/video/av34042815。把av后面的数字看做是唯一标记即可。
既然能够把弹幕加载出来,那说明一定有相关的弹幕接口。这个时候需要万能的F12了~~
于是就发现了这样一个链接:https://api.bilibili.com/x/v1/dm/list.so?oid=59624026。把oid后面的数字也看做是标记吧。当然这个接口肯定不是一直不变的,可能在不久之后就变了。
弹幕文件如何匹配
我们的重点是那这个数字到底对应https://www.bilibili.com/video/av34042815的哪个元素呢?
查看源码,找到了这样一列。当然这查找方式也不可能是唯一的。下面两个图说明番剧和普通视频的cid还是有不同之处的。(https://www.bilibili.com/video/av34566552)
于是我决定写了两个匹配
Match match = Regex.Match(input, "cid=(\\d+)");
string result = "";
if (match.Success)
{
result = match.Groups[].Value;
}
else
{
Match match1 = Regex.Match(input, "\"cid\":(\\d+)");
result = match1.Groups[].Value;
}
其实还需要两个链接
第一个str对应av号码,第二个arg对应cid号。cid号的查询已经在上面给出了。
string requestUri = string.Format("https://www.bilibili.com/video/{0}", str);
string requestUri = string.Format("https://api.bilibili.com/x/v1/dm/list.so?oid={0}", arg);
现在我们需要av号的过滤,再来一个规则匹配
Match match = Regex.Match(str, "av\\d+", RegexOptions.IgnoreCase);
if (!match.Success)
{
throw new ArgumentException("地址格式不合法");
}
怎么去提取弹幕
使用HttpClient可能会简单一点点。
var httpClient = new HttpClient(new HttpClientHandler
{
Proxy = null,
AutomaticDecompression = DecompressionMethods.GZip,
AllowAutoRedirect = true,
});
var httpClient = new HttpClient(new HttpClientHandler
{
Proxy = null,
AutomaticDecompression = DecompressionMethods.Deflate,
AllowAutoRedirect = true,
});
为什么要使用两个基本相同的代码,仅仅只是 DecompressionMethods 不同而已。
这个时候需要看一看F12中的这个东西了
里面这个Headers我们需要带入,不然可能会出现430错误
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
其实上面也有另外的写法
httpClient.DefaultRequestHeaders.Add();
接下来就要解释为什么要加入 DecompressionMethods.Deflate了
因为gzip和deflate的原因。如果不加入,获取的弹幕文件就是这样子的(具体原因自己查资料):
最后结果
至于为什么没有全部的代码,因为现在写的太乱了,等整理之后再发吧~
C# B站的弹幕提取的更多相关文章
- python 爬取B站视频弹幕信息
获取B站视频弹幕,相对来说很简单,需要用到的知识点有requests.re两个库.requests用来获得网页信息,re正则匹配获取你需要的信息,当然还有其他的方法,例如Xpath.进入你所观看的视频 ...
- Python爬虫【实战篇】bilibili视频弹幕提取
两个重要点 1.获取弹幕的url是以 .xml 结尾 2.弹幕url的所需参数在视频url响应的 javascript 中 先看代码 import requests from lxml import ...
- Python爬虫b站视频弹幕并生成词云图分析
爬虫:requests,beautifulsoup 词云:wordcloud,jieba 代码加注释: # -*- coding: utf-8 -*- import xlrd#读取excel impo ...
- 3行!仅3行代码就能抓取B站(弹幕、评论、用户)数据
今天介绍一个获取B站数据的Python扩展库-bilibili_api 可以获取的数据包括: video-视频模块 user-用户模块 dynamic-动态模块 这次用“Running Man”十周年 ...
- python爬取B站视频弹幕分析并制作词云
1.分析网页 视频地址: www.bilibili.com/video/BV19E… 本身博主同时也是一名up主,虽然已经断更好久了,但是不妨碍我爬取弹幕信息来分析呀. 这次我选取的是自己 唯一的爆款 ...
- 鸿蒙开源第三方组件 ——B站开源弹幕库引擎的迁移(上)
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录: 一.弹幕库的基础知识 二.弹幕库的使用方法 三.sample解析 四.作者系列文章合集 前言 ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- B站真的是一个神奇的地方,初次用Python爬取弹幕。
"网上冲浪""886""GG""沙发"--如果你用过这些,那你可能是7080后: "杯具"" ...
- 用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕!
众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...
随机推荐
- Lambda01 编程范式、lambda表达式与匿名内部类、函数式接口、lambda表达式的写法
1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算 ...
- Marr的视觉计算理论
Marr的视觉计算理论立足于计算机科学,系统地概括了心理物理学.神经生理学.临床神经病理学等方面已取得的所有重要成果,是迄今为止最为系统的视觉理论.Marr 的视觉计算理论虽然在细节甚 ...
- SpringMVC——文件的上传
一.加入依赖 commons-io-2.0.jar commons-fileupload-1.2.1.jar 二.接口MultipartResolver Spring MVC 为文件上传提供了直接的支 ...
- css溢出文本显示省略号
css div { width: 200px; height: 200px; border: 1px solid; /* 以下四条缺一不可 其中 display:block 为隐藏条件 */ disp ...
- POJ1753 Flip Game(位运算+暴力枚举)
Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...
- 软工作业WordCount
github项目传送门:https://github.com/zzh010/My-wc 一.WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命 ...
- CentOS 系统管理与yum软件仓库搭建
重启 reboot shutdown -r now init 6 关闭 init 0 shutdown -h now shutdown -h 20:25 #8点25关机查看内存 free CPU利用率 ...
- .Net 项目代码风格规范
最近没啥时间自己状态也不是很好,公司的事情忙,自己也有一些事情要处理,所以好久没有写博客了.利用公司午休时间写一写,以下是参考了一些资料,整理出来,共勉之. 代码风格没有正确与否,重要的是整齐划一,清 ...
- unix网络编程 str_cli epoll 非阻塞版本
unix网络编程 str_cli epoll 非阻塞版本 unix网络编程str_cli使用epoll实现讲了使用epoll配合阻塞io来实现str_cli,这个版本是配合非阻塞io. 可以看到采用非 ...
- [Win32::Console]Perl终端版生命游戏
环境,WinXP/Win7 Perl 5.16 默认循环1000次,按ESC提前退出 use strict; use Term::ReadKey; use Win32::Console; use T ...