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视频弹幕!
众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...
随机推荐
- Win10系统优化/设置脚本
Win10系统优化/设置脚本 用了很长时间win10了,用的过程中,发现了一些问题,关于系统基本的优化,和个人的使用习惯设置等等,做成了一个脚本,可以一键设置win10的系统设置,结合DWS对Win1 ...
- spring aop自动代理注解配置之一
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 9-python 的ProxyHandler处理器(代理设置)
ProxyHandler处理器(代理设置) 使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的. 很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正 ...
- java容器 Map Set List
容器:在java中,如果有一个类专门用来存放其他类的对象,这个类就叫做容器,或者叫集合,集合就是将若干性质相同或者相近的类的对象组合在一起而形成一个整体. boolean add(Object obj ...
- SQLAlchemy(ORM框架)
SQLAlchemy SQLAlchemy概述 2 3 4 5 6 7 8 9 10 11 12 13 MySQL-Python mysql+mysqldb://<user>:&l ...
- FreeMarker 的空值处理 , 简单理解 , 不用TMD就会忘记
NO.1 而对于FreeMarker来说,null值和不存在的变量是完全一样的 NO.2 ! 指定缺失变量的默认值 返回String NO.3 ?? 判断变量是否存在 返回boolean NO.4 $ ...
- ASP.NET 5 Middleware, Or Where Has My HttpModule Gone?
31 March 2015 13:22 ASP.NET 5 has been largely rewritten from the ground up, and incorporates some r ...
- UVa 11149 Power of Matrix (矩阵快速幂,倍增法或构造矩阵)
题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...
- 编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化
建议19:使用更有效的对象和集合初始化 依赖于属性和FCL 3.5之后的语法规则,现在我们有了更加简洁有效的对象和集合初始化机制:对象和集合初始化设定项. 对象初始化: class Person { ...
- POJ - 1328 Radar Installation(贪心区间选点+小学平面几何)
Input The input consists of several test cases. The first line of each case contains two integers n ...