背景
想获取youtube 完整的播放列表 playlist,对于播放列表很长的情况。我之前的做法是使用selenium模拟网页下拉。但是这种方式到列表的最底部的几个处理不好,会丢失几条数据。因为下拉的时候没法精准的定位到最底部。后来一直在处理这个selenium的怎么实现精准的下拉到底部。技术上还有挑战。只有缩短下拉的间隔来尽可能的减少丢失数据的情况。苦苦思索没有有效的解决之道时。有时候关闭一扇窗的时候,可以选择去打开一个门。在寻求解决方案的时候发现了另外2条路。
- 使用Youtube data API
- 使用第三方库pytube
使用youtube data api的方式证明可行,但是要解决翻页问题。后来发现第三方库pytube效率更高,既然有人造好了轮子,就直接拿来用好了。
pytube 正题
pytube 是用于下载 YouTube 视频的轻量级、无依赖 Python 库(和命令行工具)。
特性
- 支持渐进式和 DASH 流
- 支持下载完整的播放列表
- 支持注册
on_download_progress
和on_download_complete
回调 - 提供命令行界面
- 支持字幕轨道
- 将字幕轨道输出为 .srt 格式(SubRip Subtitle)
- 可获取缩略图 URL
- 无第三方依赖
使用pytube 下载youtube playlist
from pytube import Playlist
p = Playlist('https://www.youtube.com/playlist?list=PLS1QulWo1RIaJECMeUT4LFwJ-ghgoSH6n')
print(f'Downloading: {p.title}')
print(p.video_urls)
for video in p.videos:
print(video.title)
print(video.length)
print(video.video_id)
print(video.watch_url)
video.streams.get_by_itag(137).download()
除了下载之外,获取youbute playlist的基本信息效率还是很快,3分钟可以完成300个视频信息获取,包括视频标题,长度,视频uid,观看次数等指标。
更多的信息请参考官网
文章评论