小技能GET:bilibili视频BV号转AV号的尝试和记录
就在昨天,2020年3月23日。可爱的B站宣布将使用BV这一新的视频编号来代替原本的AV编号..
运行环境 Runtime environment
1 | 操作系统: win10 |
背景
2020年3月23日。可爱的B站宣布将使用BV这一新的视频编号来代替原本的AV编号..
据描述是为了保护B站视频UP的合法权益,
毕竟你懂的,现在那些用爬虫技术将B站视频批量盗取到抖音之类的地方套现的现象越来越严重。
算法推导
在此感谢网络上各位大佬的辛苦探究。
如何看待 2020 年 3 月 23 日哔哩哔哩将稿件的「av 号」变更为「BV 号」?
我有点担心,这帖子会不会有一天直接没了。我转载在这里。
公式1:
1 | 互相转换脚本,如果算法没猜错,可以保证在 av 号 时正确,同时应该在 时也是正确的。此代码以 WTFPL 开源。 |
图片留档:
代码实现
python3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32table='fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
tr={}
for i in range(58):
tr[table[i]]=i
s=[11,10,3,8,4,6]
xor=177451812
add=8728348608
def dec(x):
r=0
for i in range(6):
r+=tr[x[s[i]]]*58**i
return (r-add)^xor
def enc(x):
x=(x^xor)+add
r=list('BV1 4 1 7 ')
for i in range(6):
r[s[i]]=table[x//58**i%58]
return ''.join(r)
print(dec('BV17x411w7KC'))
print(dec('BV1Q541167Qg'))
print(dec('BV1mK4y1C7Bz'))
print(enc(170001))
print(enc(455017605))
print(enc(882584971))
# 作者:mcfx
# 链接:https://www.zhihu.com/question/381784377/answer/1099438784
# 来源:知乎
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。PHP
by esterTion
Java
by Feel_Sad
总结
虽然我没有做过B站的采集,
但是,身为爬虫工程师,我是心疼的,这意味着B站采集的门槛抬高了。
哈哈哈,也没有关系,习惯了。说得我采集那几大电商巨头它们的商品ID是顺号的一样,采集都靠搜索挖掘。
出于一个三年经验的爬虫开发者,我认为bilibili是不可能会去把已有数据的所有视频AV编号直接改成BV号的,也更不可能删除。
对数据库大刀阔斧的修改会有难以计量的后果和动荡,很少有企业会这么干。
那么,如果是我,我会怎么实现B站这个AV to BV的需求呢?
1 | 答:对站上已有的庞大视频AV编号做一层加密封装,一个BV编号映射一个AV编号的方式。 |
当然,我更希望我的推断是一场虚构推理。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 快乐咸鱼のRaXianch窝!
评论
WalineValine