我又来了!从上一个问题中我已经制作出一个可以随机生成bv号的函数,现在要将生成的bv号进行检索,直到找到播放量超过五十万的视频,请问如何将用python实现检索!
import requests
import re
bv = 'BV1De4y2J7VJ'
url = 'https://www.bilibili.com/video/' + bv
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.49"}
res = requests.get(url, headers=headers)
# 构建正则表达式用来提取播放次数
bofang = re.findall(r'<span title="总播放数(.*?)" class="view item">', res.text)
try:
if int(bofang[0]) > 500000:
print('超过50w,播放量为',bofang[0])
else:
print('没有50w')
except Exception as e:
print('bv号无效')
可以通过 pip install bilibili-api
,使用 bilibili-api 这个库获取播放量,下面是用随机avid转bvid,你可以换成自己的随机bvid函数
import asyncio
from bilibili_api import video
import random
table='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)
def getBvid():
return enc(random.randint(10000, 2**30))
async def main():
while True:
bvid = getBvid()
try:
v = video.Video(bvid=bvid)
info = await v.get_info()
except Exception as e:
pass
else:
if(info['stat']['view'] > 500000):
print("播放量>500k:" + bvid)
break;
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
这个看看是否有帮助
https://b23.tv/AxsCcZt
检索源是啥
一般大概是这样(使用时注意加睡眠时间
import requests
import re
# 目标URL
url = 'https://www.bilibili.com/video/BV' + yourbvcode
# 获取响应
res = requests.get(url)
# 构建正则表达式用来提取播放次数
r = re.compile('总播放数[0-9]*')
# 播放次数
t = int(r.findall(res.text)[0][4:])