我和Pytube图书馆一起工作。有一些回调函数,我想用来更新加载栏。我好像没办法让它起作用。看看其他的问题,在我看来,代码是正确的。我不知道为什么在任何情况下都不调用progress_callback。
def on_progress(self, chunk: bytes, file_handler: BinaryIO, bytes_remaining: int):
print(' progress:', on_progress)
video = pytube.YouTube( "https://www.youtube.com/watch?v=Ipa0KsyBViA", on_progress_callback=on_progress)我对回调参数有疑问,我也看到了一些指向其他参数的参数。
编辑
查看源代码,我设置了完全相同的参数。不幸的是,这个函数似乎从未被调用过。
发布于 2022-02-10 17:15:03
我注意到最新版本的pytube (11.0.2)产生了一个错误AttributeError: 'NoneType' object has no attribute 'span',因为youtube在其端改变了一些东西,所以即使是来自官方文件的一个简单的例子也无法工作。也许这就是你问题的根源。临时解决方案(通过这个github问题找到):
pip uninstall pytube
pip install git+https://github.com/glubsy/pytube@nfunc_regex_patchfrom pytube import Youtube
YouTube('https://youtu.be/9bZkp7q19f0').streams.first().download()如果成功的话,就继续前进。如果没有-寻找另一种解决方案。现在似乎每天都会有变化,因为Youtube改变了一些事情。
您所描述的代码应该可以工作,但是它做的并不多。在这个职位的帮助下,我发现on_progress回调需要按顺序排列的参数:stream、chunk和bytes_remaining。此外,打印函数将最终返回函数对象的引用,而不需要任何实际值。但是,它仍然应该运行,所以我认为您的问题可能是在1和2中描述的点,所以请检查您是否可以先下载一个文件。
from pytube import YouTube
def on_progress(stream, chunk, bytes_remaining):
"""Callback function"""
total_size = stream.filesize
bytes_downloaded = total_size - bytes_remaining
pct_completed = bytes_downloaded / total_size * 100
print(f"Status: {round(pct_completed, 2)} %")
url = "https://youtube.com/watch?v=9bZkp7q19f0"
yt = YouTube(url, on_progress_callback=on_progress)
out = yt.streams\
.filter(progressive=True, file_extension='mp4')\
.order_by('resolution')\
.desc()\
.first()\
.download()
print(f"Download complete: {out}")https://stackoverflow.com/questions/71010685
复制相似问题