# -*- coding: utf-8 -*-
# @Time: 2020/4/4 19:36
# @Author: 素还真
# @File: bv2avDownload.py
# @SoftWare: PyCharm
import requests
from lxml import etree
import os
import sys
"""
B站视频BV转AV并下载
需要安装python环境
然后安装下面两个
pip install you-get
pip install youtube-dl
you-get下载失败的可以用youtube-dl
youtube-dl下载失败的可以用you-get
两个下载失败的自己想办法O(∩_∩)O
加密 解密算法代码来源于知乎
算法作者:mcfx
算法链接:https://www.zhihu.com/question/381784377/answer/1099438784
来源:知乎
"""
#av bv加密、解密算法
table='fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
tr={}
for i in range(58):
tr[table[i]]=i
s=[11,10,3,8,4,6]
xor=177451812
add=8728348608
#bv解密
def dec(x):
r=0
for i in range(6):
r+=tr[x[s[i]]]*58**i
return (r-add)^xor
#av加密
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)
#获取bv号
def get_bv():
if len(sys.argv[:])<2:
pass
else:
if len(sys.argv[1].split("/"))<5:
pass
else:
return sys.argv[1].split("/")[4]
#bv号转av号
def bv2av():
bv=get_bv()
return dec(bv)
def get_link():
if(len(sys.argv[1].split("BV"))<2):
return "输入网址错误"
else:
av = bv2av()
return sys.argv[1].split("BV")[0]+"av%s" %av
# 拼接av号视频下载地址
def download_video():
url=get_link()
if url!=None:
os.system("youtube-dl {}".format(url))
#os调用系统执行命令行下载视频
else:
print("视频地址获取错误")
if __name__ == '__main__':
try:
download_video()
except:
print("程序运行错误\nUsage:python %s url\n如:python %s https://www.bilibili.com/video/BV1jE411f7bW" % (sys.argv[0],sys.argv[0] ))
python调用命令行下载视频
最新推荐文章于 2024-06-13 09:00:00 发布