在YouTube上看到一些比较好看的视频,想要把一个系列都下载下来。
简单分析了一下网站,感觉还可以,但是需要费时间,然后就想到了可以用现成的库,之后就想到了以前用过的一个库–pytube。
pytube的文档:https://pytube.io/en/latest/
pytube安装:pip install pytube
首先就是需要可以翻墙,这点是必须要的。
然后就是安装一下这个库。
我还用到了plyer这个库,做windows弹窗用。
但是我简单上手后发现弹窗会堆积,没去查怎么解决这个问题。
pytube这个库其实很容易就上手了,我下载的视频是有播放列表的,所以可以直接循环列表下载就行,如果是单独的视频的话,使用视频的url就可以下载,不过这样的话,我比较推荐直接使用网站下载(油猴插件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| from pytube import YouTube from pytube import Playlist from time import sleep from plyer import notification from pytube.cli import on_progress
def download_ok(msg): notification.notify( title="YouTube下载提示", message=msg, app_icon=r"favicon.ico", timeout=10, )
a1 = 'https://www.youtube.com/playlist?list=' a2 = "https://www.youtube.com/playlist?list=" b1 = "https://www.youtube.com/playlist?list=" b2 = "https://www.youtube.com/playlist?list=" videoList = [a1, a2, b1, b2] s = 0 d = ["a1", "a2", "b1", "b2"] for a in videoList: p = Playlist(a) index = 0 proxies = { "http": "http://127.0.0.1:7890", "https": "http://127.0.0.1:7890" } f = d[s] for url in p.video_urls: while 1: try: yt = YouTube(url, proxies=proxies, on_progress_callback=on_progress) title = yt.title YTstream = yt.streams.get_highest_resolution() download_ok("视频{}开始下载".format(title)) print('download ---') YTstream.download(output_path="./"+f) print('download ok') download_ok("视频{}下载成功".format(title)) download_ok(title) sleep(5) break except Exception as e: print(e) sleep(5) s = s + 1 print(f+'all download') print("ok")
|
其实逻辑是非常简单的,就是循环列表。
我这里是4个列表a1,a2,b1,b2。然后我把这四个列表便利出来,使用Playlist这个方法将该列表的信息取出来。
之后再通过video_urls取出list中所有视频的url。
然后通过Youtube()这个方法初始化一下内容。
再就是下载视频了,我这里之所以有一个while 1和try是因为视频下载可能会出现问题,然后我不想因为问题而耽搁,就直接无限循环了,如果正常的话,就break出来,不正常就重新下载。
更多的用法其实搜一下文档就可以了,当然直接在pycharm可以看提示。