如何使用 Python 下载 YouTube 视频?

Rya*_*358 1 python http python-3.x

我想用 Python 下载 YouTube 视频。我用Python试过opencv,但是一直有问题。我正在尝试使用 pytube3 和 Python 3。我尝试了这个程序(我在StackOverflow 上找到的):

from pytube import YouTube
YouTube('http://youtube.com/watch?v=9bZkp7q19f0').streams.first().download()
Run Code Online (Sandbox Code Playgroud)

但它因“HTTP 错误 410”错误而失败。当我运行各种 pytube 程序时,我不断收到“HTTP 错误 410”。我更改了 URL 并在浏览器中测试了 URL。当我运行 Python 程序下载视频时,没有任何效果。

我正在尝试运行此程序(正如我在此处找到的那样):

from pytube import YouTube
 
try:
    yt_obj = YouTube('https://www.youtube.com/watch?v=DkU9WFj8sYo')
 
    print(f'Video Title is {yt_obj.title}')
    print(f'Video Length is {yt_obj.length} seconds')
    print(f'Video Description is {yt_obj.description}')
    print(f'Video Rating is {yt_obj.rating}')
    print(f'Video Views Count is {yt_obj.views}')
    print(f'Video Author is {yt_obj.author}')
 
except Exception as e:
    print(e)
Run Code Online (Sandbox Code Playgroud)

我懂了:

HTTP 错误 410:Gone Traceback(最近一次调用最后一次):文件“e.py”,第 9 行,在 yt_obj = YouTube(url) 文件“/home/jdoe/path_dir/lib/python3.8/site-packages/pytube / main .py”,第 91 行,在init self.prefetch() 文件中“/home/jdoe/path_dir/lib/python3.8/site-packages/pytube/ main.py”,第 181 行,在预取 self.vid_info_raw = request.get(self.vid_info_url) 文件“/home/jdoe/path_dir/lib/python3.8/site-packages/pytube/request.py”中,第 36 行,在 get return _execute_request(url).read().decode("utf-8") 文件“/home/jdoe/path_dir/lib/python3.8/site-packages/pytube/request.py”,第 24 行,在_execute_request return urlopen(request) # nosec File "/usr/lib/python3.8/urllib/request.py", line 222, in urlopen return opener.open(url, data, timeout) File "/usr/lib/python3 .8/urllib/request.py”,第 531 行,在打开 response = meth(req, response) 文件“/usr/lib/python3.8/urllib/request.py”,第 640 行,在 http_response response = self. parent.error( File "/usr/lib/python3.8/urllib/request.py", line 563, in error result = self._call_chain(*args) File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain result = func(*args) File "/usr/lib/python3.8/urllib/request.py", line 755, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "/usr/lib/python3.8/urllib/request.py", line 531, in open response = meth(req, response) File "/ usr/lib/python3.8/urllib/request.py”,第 640 行,在 http_response response = self.parent.error( 文件“/usr/lib/python3.8/urllib/request.py”,第 569 行,在错误返回 self._call_chain(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 502 行,在 _call_chain 结果 = func(*args) 文件“/usr/lib/python3.8/ urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410: Gone8/urllib/request.py”,第 502 行,在 _call_chain result = func(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 755 行,在 http_error_302 中返回 self.parent.open (new, timeout=req.timeout) 文件 "/usr/lib/python3.8/urllib/request.py", line 531, in open response = meth(req, response) File "/usr/lib/python3.8 /urllib/request.py", line 640, in http_response response = self.parent.error( File "/usr/lib/python3.8/urllib/request.py", line 569, in error return self._call_chain(* args) 文件“/usr/lib/python3.8/urllib/request.py”,第 502 行,在 _call_chain 结果 = func(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410: Gone8/urllib/request.py”,第 502 行,在 _call_chain result = func(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 755 行,在 http_error_302 中返回 self.parent.open (new, timeout=req.timeout) 文件 "/usr/lib/python3.8/urllib/request.py", line 531, in open response = meth(req, response) File "/usr/lib/python3.8 /urllib/request.py", line 640, in http_response response = self.parent.error( File "/usr/lib/python3.8/urllib/request.py", line 569, in error return self._call_chain(* args) 文件“/usr/lib/python3.8/urllib/request.py”,第 502 行,在 _call_chain 结果 = func(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410: Gone在 _call_chain 结果 = func(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 755 行,在 http_error_302 中返回 self.parent.open(new, timeout=req.timeout) 文件“/ usr/lib/python3.8/urllib/request.py", line 531, in open response = meth(req, response) File "/usr/lib/python3.8/urllib/request.py", line 640, in http_response response = self.parent.error( File "/usr/lib/python3.8/urllib/request.py", line 569, in error return self._call_chain(*args) File "/usr/lib/python3.8 /urllib/request.py", line 502, in _call_chain result = func(*args) File "/usr/lib/python3.8/urllib/request.py", line 649, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410: Gone在 _call_chain 结果 = func(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 755 行,在 http_error_302 中返回 self.parent.open(new, timeout=req.timeout) 文件“/ usr/lib/python3.8/urllib/request.py", line 531, in open response = meth(req, response) File "/usr/lib/python3.8/urllib/request.py", line 640, in http_response response = self.parent.error( File "/usr/lib/python3.8/urllib/request.py", line 569, in error return self._call_chain(*args) File "/usr/lib/python3.8 /urllib/request.py", line 502, in _call_chain result = func(*args) File "/usr/lib/python3.8/urllib/request.py", line 649, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410: Gonepy", line 755, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "/usr/lib/python3.8/urllib/request.py", line 531, in open response = meth( req, response) 文件 "/usr/lib/python3.8/urllib/request.py", line 640, in http_response response = self.parent.error( File "/usr/lib/python3.8/urllib/request. py", line 569, in error return self._call_chain(*args) File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain result = func(*args) File "/usr /lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410: Gonepy", line 755, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "/usr/lib/python3.8/urllib/request.py", line 531, in open response = meth( req, response) 文件 "/usr/lib/python3.8/urllib/request.py", line 640, in http_response response = self.parent.error( File "/usr/lib/python3.8/urllib/request. py", line 569, in error return self._call_chain(*args) File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain result = func(*args) File "/usr /lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410: Gone在打开 response = meth(req, response) 文件“/usr/lib/python3.8/urllib/request.py”,第 640 行,在 http_response response = self.parent.error( File "/usr/lib/python3. 8/urllib/request.py", line 569, in error return self._call_chain(*args) File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain result = func(* args) 文件“/usr/lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410:不见了在打开 response = meth(req, response) 文件“/usr/lib/python3.8/urllib/request.py”,第 640 行,在 http_response response = self.parent.error( File "/usr/lib/python3. 8/urllib/request.py", line 569, in error return self._call_chain(*args) File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain result = func(* args) 文件“/usr/lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 410:不见了第 502 行,在 _call_chain 结果 = func(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError:HTTP 错误 410:消失第 502 行,在 _call_chain 结果 = func(*args) 文件“/usr/lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError:HTTP 错误 410:消失

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次调用最后一次):文件“e.py”,第 14 行,在 raise Exception('Some exception occurred.') 异常:发生了一些异常。

我的研究表明 410 错误涉及一个 URL 被找到但随后被移动。由于问题发生在不同的 youtube 链接和不同的程序上,我不知所措。当我不断收到错误 410 消息时,如何下载 YouTube 视频?

lar*_*sks 6

有一个错误在pytube3的结果在410错误。有一个从该问题链接的修复程序似乎可以解决该问题。如果我安装补丁版本:

pip install git+https://github.com/Zeecka/pytube@fix_1060#egg=pytube
Run Code Online (Sandbox Code Playgroud)

然后我可以获取有关 youtube 视频的信息而不会出现该错误:

>>> import pytube
>>> yt = pytube.YouTube('https://www.youtube.com/watch?v=DkU9WFj8sYo')
>>> yt.title
'Space Ranger Video Game using FXGL and JavaFX'
Run Code Online (Sandbox Code Playgroud)

该修复已作为拉取请求提交。通读讨论,似乎仍有一些未解决的问题。

  • 尝试升级到版本11:`python -m pip install --upgrade pytube` (3认同)