bxlx视频历史弹幕更换seg.so存储类型后依然可以成功采集爬取

最近做了个小项目,是爬取更换seg.so接口后的bxlx视频历史弹幕,并最终打包成.exe格式的可运行软件,发送给客户。为方便后期维护,以免忘记代码编辑过程中所用到的知识点,这里为自己做一下笔记记录。

因为是自己反复查资料并验证过的,花费了很多心血和时间,所以一些特殊的py代码文件这里不做解释,本文仅为了方便自己后期维护本软件使用。如果有想要源码进行学习的或者有本项目相关技术咨询的,提供有偿服务。bxlx视频历史弹幕爬取器本软件的话T(某)宝已在售(店铺名称:词云社),有意向的可以进行购买。

(另有集弹幕信息采集、视频信息一键批量采集、up主信息所有视频信息一键采集、按关键词一键采集、评论采集等多功能合一的升级版在售!)

本文只介绍此弹幕采集软件功能:

B弹幕爬取方式一:直接复制粘贴网址链接中的BV值(如上图所示)提取bxlx限制当日最大数量弹幕,不用去查找网址cid值、反爬虫设置等,适合不熟悉爬虫的使用。

B弹幕爬取方式二:根据输入的历史日期精确爬取每条弹幕的id,发送时间、字体、颜色、内容信息等,可一键精确爬取所有弹幕信息!

自动分词功能:自动分词关键词,统计词频,出现频率并下载成excel数据表。

 笔记正式记录:

第一步:

由于是自己记录笔记使用,软件GUI的TK框架的建立就不编辑了,已存储在自己的电脑相关文件夹中。

第二步:

B视频弹幕分为两种弹幕形式:

1、每天bxlx可限制爬取的弹幕。

2、历史弹幕(可根据历史弹幕日期爬取到所有弹幕)。

对于第一种就是目前常见的可直接爬取的xml格式的弹幕,弹幕文件链接是'https://comment.bxlx.com/xxxxxxxx.xml',其中的xxxxxx就是视频的cid值,也就是oid值(这两个值一样),可以随便在bxlx网站找一个视频试试。

 

2、将上面找到的cid值替换到弹幕文件链接中xxxxx即可:

部分核心代码如下:

def cid_text(cid):
    cid_dm='https://comment.bl.com/{}.xml'.format(cid)#为防止屏蔽,网址替换成bl,运行时换回来
    res=requests.get(cid_dm)
    res.encoding = res.apparent_encoding
    bs=BeautifulSoup(res.text,'xml')
    cid_content=bs.find_all('d')
    danmu_list=[]

    #是否过滤相同弹幕
    #默认过滤
     for cont in cid_content:
         if cbox.get()=='是':
              if cont.text not in danmu_list:
                    contents=cont.text
                    danmu_list.append(contents)
              else:
                   pass
         else:
             contents=cont.text
             danmu_list.append(contents)
cid_text(cid=1078227915)

 3、我们可以看到这个示例xml网址链接中的<maxlimit>500</maxlimit>,表示这个视频最大只能爬取当天的可显示的500条弹幕(bxlx限制这种爬取到的弹幕所致),无法爬取到所有的弹幕。

这个时候就要用到历史弹幕的功能了!!!

1、

 2、历史弹幕链接分析完了,我们直接去爬取的话会出现乱码的情况,根据代码的编辑形式不同,每个人出现的乱码情况不同,大致分为全部乱码和部分乱码,以及中文无乱码但是其他字段乱码的情况。

我看网上有人直接用re.findall正则表达式去提取不乱码的中文,也可以直接提取到部分弹幕,但是经过试验,提取的弹幕并不完整,而且其他信息全部丢失(比如弹幕id、发送时间等信息全部丢失,因为他只不过是暴力提取,根本无法完美呈现。)

3、现在的bxlx历史弹幕链接(如上个历史弹幕链接示例),直接将此链接输入到浏览器后,会自动下载一个seg.so文件,用笔记本txt打开后是一个乱码的文件,因此关于乱码的情况,我们用平时的encoding='utf-8','gbk',或者apparent_encoding的方式是行不通的,这个是经过代码试验,然后分析过bxlx现在的历史弹幕存储方式后得出的。

4、那只好再去查资料再分析。后来查到了这个名词:protobuf,bxlx的历史弹幕现在就是用这个东西进行一系列的加密存储的。这个东西具体是个啥,可以自行百度,这里不做解释了,具体的我也不懂,既然我能爬取成功那我也不需要太懂。网上关于这个的资料也很多(但是也很乱),我反正跟着琢磨了一大圈,有的让安装编译器,有的让在python文件中插入,增加Bin文件环境变量,还有讲解关于序列反序列的等等等等,想试试的可以去试试。不过我当时没有这么做,因为我最后把下载安装的protobuf编译器、protobuf文件的Bin环境变量什么的都删了,照样运行成功!

5、重点又来了!那就是这个seg.so文件以及整个历史弹幕链接怎么解密成我们需要的形式呢?先看下解密后成功运行后的效果!怎么样,是不是帅呆了!而且我设置了爬取的日期时间是2023-04-09,那它就只爬取了这一天的弹幕信息。另外我总设置中的代码编辑的功能是可以输入开始日期到结束日期,点击开始爬取后,就会自动将这一时间段的历史弹幕全部爬取下来,是不是更帅了!想必您也手痒痒想试试了吧?那接着往下看!

 6、如果您已经在网上自行查取了一些相关资料的话,应该能看到一些关于bxlx的历史弹幕爬取需要用到protobuf编译的信息,总结出来大概就是我们最终需要一个转化后的以_pb2.py命名的文件,通过文件中转化的功能函数代码实现历史弹幕的无乱码处理以及全部信息的显示!(不用担心,这个是自动转化的,不用自己去写,往下看就行了),网上最难的就是这个文件是怎么形成的,介绍的简直一塌糊涂。

7、过多的解释没有,不要懒,不懂的自己去百度,这里只有操作步骤,看好了,这个文件怎么来的!

7.1首先打开这个网址:bilibili-API-collect/dm.proto at bb437d2012e6291b38c78d42755db9d836d4975f · SocialSisterYi/bilibili-API-collect · GitHubhttps://github.com/SocialSisterYi/bilibili-API-collect/blob/bb437d2012e6291b38c78d42755db9d836d4975f/grpc_api/bilibili/community/service/dm/v1/dm.proto

7.3接着下拉到这个位置,这个message CommandDm复制下来:

 7.4然后打开另一个网址,将前面7.2和7.3步骤复制的代码全部粘贴进这个网站左侧的输入框中,左上角选择Python格式,然后直接点击Generate转换制作即可得到一个my_pb2.py文件!制作完成!

Protobuf Code Generator and Parser | protobufnet | Marc Gravellhttps://protogen.marcgravell.com/

 

(后来证明这个_pb2.py文件用网站直译有问题(不过可以用),文章最后有说明~)

文件复制粘贴进项目文件中,如下图:

其他爬取功能文件可直接调用此_pb2.py文件中的功能,如下图:

 具体编译后,实现成功解密bxlx历史弹幕文件信息,如下图:

 

8、自此,最主要的核心功能和难点总结完毕,其他的实现爬取弹幕的代码网上一抓一大把,自己可以复制改写,也可以自己写爬取程序,其他的难点按照上述操作即可!

9、如需此已经打包好的爬取软件,可以@我,长期有偿解答此项目问题,同时也可以直接去购买。(t b在售:词云社)

后续补充:后来证明,关于用那个网站直接将proto文件的解析出来的_pb2.py文件,也可以用。但是如果追求想要程序完美的,还是需要下载proto.exe及一个版本相同的python文件解析后出来的_pb2.py文件才更完美(网上有教程,一搜一大片,这里不再赘述)。下面放一张完美解析的图,可以和上面用网站自动解析那个图对比一下,就能看出这个完美解析的是包含完整采集函数功能的,而那个虽然也能用,但是一堆乱码(后来证明用着用着就出问题了。)完结撒花~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值