我试图使用 pytube 库下载 youtube 视频的音频,但它不再工作尝试更新 pytube 仍然不起作用。
from pytube import YouTube
YouTube('https://www.youtube.com/watch?v=HL9j8xuQ6Wc').streams.first().download()
我收到的错误
Traceback (most recent call last):
File "/home/ideapoke/Documents/financial_analysis/youtube_to_audio.py", line 31, in <module>
YouTube('https://www.youtube.com/watch?v=HL9j8xuQ6Wc').streams.first().download()
File "/home/ideapoke/.local/lib/python3.10/site-packages/pytube/__main__.py", line 91, in __init__
self.prefetch()
File "/home/ideapoke/.local/lib/python3.10/site-packages/pytube/__main__.py", line 181, in prefetch
self.vid_info_raw = request.get(self.vid_info_url)
File "/home/ideapoke/.local/lib/python3.10/site-packages/pytube/request.py", line 36, in get
return _execute_request(url).read().decode("utf-8")
File "/home/ideapoke/.local/lib/python3.10/site-packages/pytube/request.py", line 24, in _execute_request
return urlopen(request) # nosec
File "/usr/lib/python3.10/urllib/request.py", line 216, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.10/urllib/request.py", line 525, in open
response = meth(req, response)
File "/usr/lib/python3.10/urllib/request.py", line 634, in http_response
response = self.parent.error(
File "/usr/lib/python3.10/urllib/request.py", line 557, in error
result = self._call_chain(*args)
File "/usr/lib/python3.10/urllib/request.py", line 496, in _call_chain
result = func(*args)
File "/usr/lib/python3.10/urllib/request.py", line 749, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/usr/lib/python3.10/urllib/request.py", line 525, in open
response = meth(req, response)
File "/usr/lib/python3.10/urllib/request.py", line 634, in http_response
response = self.parent.error(
File "/usr/lib/python3.10/urllib/request.py", line 563, in error
return self._call_chain(*args)
File "/usr/lib/python3.10/urllib/request.py", line 496, in _call_chain
result = func(*args)
File "/usr/lib/python3.10/urllib/request.py", line 643, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 410: Gone
错误“HTTP Error 410: Gone”表示 Pytube 尝试访问的 YouTube 资源已永久移除。这通常是由于 YouTube 改变其网站结构导致的,从而破坏了 Pytube 的兼容性。
要解决此问题,请尝试以下方法:
1. 升级 Pytube 到最新版本:
有时,这个问题可以通过使用最新版本的 Pytube 来解决,该版本可能已经解决了兼容性问题。如果尚未升级到最新版本,请尝试以下操作:
bash
pip install --upgrade pytube
2. 安装或升级 Youtube-DLP:
Youtube-dl 是另一个下载 Youtube 视频的库,它通常比 Pytube 更新的更快。建议使用 Youtube-dl 的分支 youtube-dlp,因为它积极维护并提供了改进的功能。
bash
pip install --upgrade youtube-dlp
以下是如何使用 youtube-dlp 下载视频的示例:
```python import youtube_dlp
ydl_opts = { 'format': 'bestaudio/best', # 下载最佳音频质量 'extractaudio': True, # 仅提取音频 'audioformat': 'mp3', # 将音频转换为 mp3 格式 'outtmpl': '%(title)s.%(ext)s' # 定义输出文件名 }
with youtube_dlp.YoutubeDL(ydl_opts) as ydl: ydl.download(['https://www.youtube.com/watch?v=HL9j8xuQ6Wc']) ```
3.降级 Pytube 版本:
如果最新版本仍然存在问题,可以尝试降级到先前版本。可以通过指定版本号来安装特定版本的 Pytube:
bash
pip install pytube==10.9.0 # Replace 10.9.0 with the desired version
可以尝试不同的版本,直到找到一个可行的版本。
如果在尝试这些步骤后仍然遇到问题,请提供以下附加信息,以便我进一步协助:
- 使用的 Pytube 版本
- 操作系统的版本
- 是否位于代理或防火墙后面