与之前的下载器对比的优势:
代码结构更加清晰:将获取视频链接的功能从下载视频的功能中分离出来,分别封装在不同的函数中,提高了代码的可读性和可维护性。
错误处理更集中:使得与特定功能相关的错误能够在相应的函数内进行集中处理和报告,便于定位和解决问题。
可扩展性更强:如果未来需要对获取视频链接的逻辑进行修改、添加新的获取方式或者对下载部分进行调整,都可以在各自的函数内进行独立修改,而不影响其他部分的代码。
导入所需的模块和库,并配置了日志的基本设置
import requests
from bs4 import BeautifulSoup
import re
import logging
import os
import time
from tkinter import Tk, Entry, Button, Label, messagebox
import yt_dlp
# 设置日志记录
logging.basicConfig(level=logging.INFO)
这段定义了 get_video_links 函数,用于从给定的网址获取视频链接
首先,它通过 requests 库获取网页内容,如果获取过程中出现网络请求异常,会记录错误日志并弹出错误消息框,然后返回空列表。
然后,使用 BeautifulSoup 解析网页内容,如果解析过程出错,也做相应处理。
接着,通过遍历网页中的链接来筛选出以 .mp4 结尾的视频链接。如果在查找过程中出现异常,同样记录错误并弹出消息框。
最后,函数返回获取到的视频链接列表。
def get_video_links(url):
"""
从给定的 URL 获取视频链接
:param url: 要获取视频链接的网页 URL
:return: 视频链接列表,如果获取过程中出错则返回空列表
"""
try:
response = requests.get(url)
response.raise_for_status()
html = response.text
except requests.exceptions.RequestException as e:
logging.error(f"请求网页时出错: {
e}")
messagebox.showerror("错误", f"请求网页时出错: {
e}")
return []
try:
soup = BeautifulSoup(html, 'html.parser')
except Exception as e:
logging.error(f"解析网页内容时出错: {
e}")
messagebox.showerror("错误", f"解析网页内容时出错: {
e}")
return []
video_links = []
try:
for link in soup.find_all('a', href=True):
href = link['href']
if re.match(r'.*?\.mp4', href):
video_links.append(href)
except<