前提条件:
python环境:python3.6.4
利用到的库:
import os
import os.path
import you_get
from lxml import etree
import requests
import os
import re
视频l类型:必须是有视频选集的
程序运行思路
代码实现
import os
import os.path
import you_get
from lxml import etree
import requests
import os
import re
# 获取所有的视频url
def get_url(ID):
video_url = 'https://网站的域名/video/'
home_url = video_url + ID
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}
response = requests.get(home_url, headers=headers)
response.encoding = 'utf-8'
text = response.text
html = etree.HTML(text)
li_list = html.xpath('//div[@class="cur-list"]/ul/li')
url_list = []
for i in range(1, len(li_list) + 1):
url = '{}{}?p={}'.format(video_url, ID, i)
url_list.append(url)
return url_list
# 检测
def detection(ID, name):
status = True
try:
# 获取所有的视频url
url_list = get_url(ID)
# 统计共有多少个视频
num = len(url_list)
# 展示一共多少个视频
print('---共有{}个视频---'.format(num))
except:
print('获取视频失败')
url_list = []
num = 0
status = False
# 判断用户是否输入内容
if name:
# 获取当前工作目录
path = os.getcwd()
# 拼接文件目录
file_path = os.path.join(path, name)
if os.path.isdir(file_path):
print('---该文件已存在,请重新命名---')
status = False
else:
print('---文件夹名称没问题---')
else:
print('---请输入创建文件夹的名称---')
status = False
return status, url_list, num
# 最后处理文件,把xml文件删除,并重命名flv视频名字
def BatchFileName(path):
# 遍历该目录下的文件
file_list = os.listdir(path)
# 遍历该文件
for flie in file_list:
if '.cmt.xml' in flie:
# 删除xml文件
os.remove(flie)
try:
if '.flv' in flie:
name = re.findall('.*?\(P\d{1,3}. (.*?)\)\.flv', flie)[0] + '.flv'
# 重命名flv视频名字
os.rename(flie, name)
except:
pass
# 判断视频有没有下载遗漏
def verify(path, num):
file_num = []
file_list = os.listdir(path)
for file in file_list:
try:
x = int(re.findall('.*?\(P(\d{1,3})\..*?\.flv', file)[0])
file_num.append(x)
except:
pass
lis = [i for i in range(1, num+1)]
result = list(set(lis) - set(file_num))
return result
# 开始批量下载视频
def Start():
ID = input('请输入视频ID:')
name = input('请输入文件夹名称:')
# 检测
result, url_list, num = detection(ID, name)
if result == True:
print('---开始下载了---')
# 创建保存视频的文件夹
os.mkdir(name)
# 获取当前工作目录
path = os.getcwd()
# 拼接文件目录
video_path = os.path.join(path, name)
# 切换到保存视频的文件夹
os.chdir(video_path)
p = 1
# 下载视频
for url in url_list:
os.system('you-get {}'.format(url))
print('---已下载{}个视频---'.format(p))
p += 1
while True:
# 判断视频有没有下载遗漏,如果有遗漏就下载遗漏的
result_list = verify(video_path, num)
if result_list:
for i in result_list:
again_url = url_list[0][:-1] + str(i)
print('---重新下载第{}个视频---'.format(i))
os.system('you-get {}'.format(again_url))
else:
print('---没有下载遗漏,已完成所有下载---')
break
print('---开始整理文件---')
# 最后处理文件,把xml文件删除,并重命名flv视频名字
BatchFileName(video_path)
print('---已完成整理---')
else:
print('---出问题了,请重新运行!---')
Start()
运行效果
运行代码后
在终端中输入视频的ID
再输入保存视频的文件夹名称
如果没有问题,就会开始下载
如果有问题就重新运行