要知道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站的弹幕提取的更多相关文章

  1. python 爬取B站视频弹幕信息

    获取B站视频弹幕,相对来说很简单,需要用到的知识点有requests.re两个库.requests用来获得网页信息,re正则匹配获取你需要的信息,当然还有其他的方法,例如Xpath.进入你所观看的视频 ...

  2. Python爬虫【实战篇】bilibili视频弹幕提取

    两个重要点 1.获取弹幕的url是以 .xml 结尾 2.弹幕url的所需参数在视频url响应的 javascript 中 先看代码 import requests from lxml import ...

  3. Python爬虫b站视频弹幕并生成词云图分析

    爬虫:requests,beautifulsoup 词云:wordcloud,jieba 代码加注释: # -*- coding: utf-8 -*- import xlrd#读取excel impo ...

  4. 3行!仅3行代码就能抓取B站(弹幕、评论、用户)数据

    今天介绍一个获取B站数据的Python扩展库-bilibili_api 可以获取的数据包括: video-视频模块 user-用户模块 dynamic-动态模块 这次用“Running Man”十周年 ...

  5. python爬取B站视频弹幕分析并制作词云

    1.分析网页 视频地址: www.bilibili.com/video/BV19E… 本身博主同时也是一名up主,虽然已经断更好久了,但是不妨碍我爬取弹幕信息来分析呀. 这次我选取的是自己 唯一的爆款 ...

  6. 鸿蒙开源第三方组件 ——B站开源弹幕库引擎的迁移(上)

    鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录: 一.弹幕库的基础知识 二.弹幕库的使用方法 三.sample解析 四.作者系列文章合集 前言 ...

  7. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  8. B站真的是一个神奇的地方,初次用Python爬取弹幕。

    "网上冲浪""886""GG""沙发"--如果你用过这些,那你可能是7080后: "杯具"" ...

  9. 用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕!

    众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...

随机推荐

  1. sudo apt install libreadline-dev Reading package lists... Error!

    luo@luo-ThinkPad-W540:~$ luo@luo-ThinkPad-W540:~$ luo@luo-ThinkPad-W540:~$ luo@luo-ThinkPad-W540:~$ ...

  2. 通过kfed自动获取磁盘信息的小脚本

    通过kfed自动获取磁盘信息的小脚本 编译KFED [oracle@rac lib]$cd $ORACLE_HOME/rdbms/lib [oracle@rac lib]$ pwd /u01/app/ ...

  3. 2、python的print函数格式化输出

    1.格式化输出浮点数(float) pi = 3.141592653 print('%10.3f' % pi)  #字段宽10,精度3 ,结果 print('%010.3f' % pi)  #用0填充 ...

  4. python之连接oracle数据库

    环境: windows,python2.7 1.下载cx_Oracle 在windows下不要使用easy_install或者pip,因为这样安装不会同步环境,并报错: distutils.error ...

  5. 怎样去阅读一份php源代码

    一份好的源代码例如 dz的论坛,wind论坛,帝国cms,dedecms等,都具有自己的一套设计思路和设计模式,所以在看某个产品之前就要做好心理准备,可以把自己的经验和这些产品做对比,但千万别一直用自 ...

  6. 《the art of software testing》第四章 测试用例的设计

    白盒测试 逻辑覆盖测试: 逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术.它属白盒测试.白盒测试的测试方法有代码检查法.静态结构分析法.静态质量度量法.逻辑覆盖法.基本路径测试法.域测试.符 ...

  7. Ref 和out

    out 关键字会导致参数通过引用来传递.这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化.若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字.例如 ...

  8. linux 的各个文件夹都是干什么用

    http://www.ruanyifeng.com/blog/2012/02/a_history_of_unix_directory_structure.html http://www.pathnam ...

  9. cmake的一些词的解释

    cmake中一些预定义变量 PROJECT_SOURCE_DIR  工程的根目录 PROJECT_BINARY_DIR    运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR} ...

  10. 一步之遥——第七届蓝桥杯C语言B组(国赛)第一题

    原创 一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退.按 ...