C# B站的弹幕提取
2021-07-04 13:21
标签:null list success methods 数字 header margin 如何 过滤 如果只考虑视频,B站的链接格式为:https://www.bilibili.com/video/av34042815。把av后面的数字看做是唯一标记即可。 既然能够把弹幕加载出来,那说明一定有相关的弹幕接口。这个时候需要万能的F12了~~ 于是就发现了这样一个链接:https://api.bilibili.com/x/v1/dm/list.so?oid=59624026。把cid后面的数字也看做是标记吧。当然这个接口肯定不是一直不变的,可能在不久之后就变了。 我们的重点是那这个数字到底对应https://www.bilibili.com/video/av34042815的哪个元素呢? 查看源码,找到了这样一列。当然这查找方式也不可能是唯一的。下面两个图说明番剧和普通视频的cid还是有不同之处的。(https://www.bilibili.com/video/av34566552) 于是我决定写了两个匹配 其实还需要两个链接 第一个str对应av号码,第二个arg对应cid号。cid号的查询已经在上面给出了。 现在我们需要av号的过滤,再来一个规则匹配 使用HttpClient可能会简单一点点。 为什么要使用两个基本相同的代码,仅仅只是 DecompressionMethods 不同而已。 这个时候需要看一看F12中的这个东西了 里面这个Headers我们需要带入,不然可能会出现430错误 其实上面也有另外的写法 接下来就要解释为什么要加入 DecompressionMethods.Deflate了 因为gzip和deflate的原因。如果不加入,获取的弹幕文件就是这样子的(具体原因自己查资料): 至于为什么没有全部的代码,因为现在写的太乱了,等整理之后再发吧~ C# B站的弹幕提取 标签:null list success methods 数字 header margin 如何 过滤 原文地址:https://www.cnblogs.com/yinghualuowu/p/9855595.html要知道B站的弹幕位置
弹幕文件如何匹配
Match match = Regex.Match(input, "cid=(\\d+)");
string result = "";
if (match.Success)
{
result = match.Groups[1].Value;
}
else
{
Match match1 = Regex.Match(input, "\"cid\":(\\d+)");
result = match1.Groups[1].Value;
}
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);
Match match = Regex.Match(str, "av\\d+", RegexOptions.IgnoreCase);
if (!match.Success)
{
throw new ArgumentException("地址格式不合法");
}
怎么去提取弹幕
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,
});
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();
最后结果
上一篇:Spark基于scala api
下一篇:C#泛型