开发YouTube视频下载器:如何用Python获取视频标题、时长及预览图?
使用Python获取YouTube视频信息的解决方案
依赖安装
先安装专门处理YouTube视频的pytube库,比直接解析HTML稳定得多:
pip install pytube requests
完整代码实现
from pytube import YouTube import requests def fetch_youtube_video_info(video_url): # 初始化YouTube对象 yt = YouTube(video_url) # 获取并打印标题 video_title = yt.title print(f"视频标题:{video_title}") # 处理时长(秒转时分秒格式)并打印 total_seconds = yt.length hours = total_seconds // 3600 minutes = (total_seconds % 3600) // 60 seconds = total_seconds % 60 formatted_duration = f"{hours:02d}:{minutes:02d}:{seconds:02d}" print(f"视频时长:{formatted_duration}") # 下载并保存预览图 thumbnail_link = yt.thumbnail_url response = requests.get(thumbnail_link) if response.status_code == 200: # 处理标题中的非法字符,避免保存失败 safe_filename = "".join([c for c in video_title if c not in '/\\:*?"<>|']) save_path = f"{safe_filename}_preview.jpg" with open(save_path, "wb") as img_file: img_file.write(response.content) print(f"预览图已保存至:{save_path}") else: print("预览图下载失败") # 调用示例 if __name__ == "__main__": target_url = input("请输入YouTube视频链接:") fetch_youtube_video_info(target_url)
关键说明
- 标题、时长、预览图均通过
pytube直接调用YouTube的接口获取,无需解析HTML,避免页面结构变动导致失效 - 时长自动转换为
HH:MM:SS的易读格式 - 预览图保存时自动过滤标题中的非法字符,确保文件能正常写入
关于lxml失败的原因
YouTube页面核心信息多为JavaScript动态渲染,静态HTML中并不包含完整的时长、预览图地址等数据,直接用lxml解析静态源码自然拿不到有效内容。pytube会模拟合法请求从官方接口拉取数据,稳定性远高于直接解析页面。
内容的提问来源于stack exchange,提问作者noname
相关产品推荐
相关产品推荐

