Acabo de descargar pytube (versión 11.0.1) y comencé con este fragmento de código de aquí :
from pytube import YouTube YouTube('https://youtu.be/9bZkp7q19f0').streams.first().download()que da este error:
AttributeError Traceback (most recent call last) <ipython-input-29-0bfa08b87614> in <module> ----> 1 YouTube('https://youtu.be/9bZkp7q19f0').streams.first().download() ~/anaconda3/lib/python3.8/site-packages/pytube/__main__.py in streams(self) 290 """ 291 self.check_availability() --> 292 return StreamQuery(self.fmt_streams) 293 294 @property ~/anaconda3/lib/python3.8/site-packages/pytube/__main__.py in fmt_streams(self) 175 # https://github.com/pytube/pytube/issues/1054 176 try: --> 177 extract.apply_signature(stream_manifest, self.vid_info, self.js) 178 except exceptions.ExtractError: 179 # To force an update to the js file, we clear the cache and retry ~/anaconda3/lib/python3.8/site-packages/pytube/extract.py in apply_signature(stream_manifest, vid_info, js) 407 408 """ --> 409 cipher = Cipher(js=js) 410 411 for i, stream in enumerate(stream_manifest): ~/anaconda3/lib/python3.8/site-packages/pytube/cipher.py in __init__(self, js) 42 43 self.throttling_plan = get_throttling_plan(js) ---> 44 self.throttling_array = get_throttling_function_array(js) 45 46 self.calculated_n = None ~/anaconda3/lib/python3.8/site-packages/pytube/cipher.py in get_throttling_function_array(js) 321 322 array_raw = find_object_from_startpoint(raw_code, match.span()[1] - 1) --> 323 str_array = throttling_array_split(array_raw) 324 325 converted_array = [] ~/anaconda3/lib/python3.8/site-packages/pytube/parser.py in throttling_array_split(js_array) 156 # Handle functions separately. These can contain commas 157 match = func_regex.search(curr_substring) --> 158 match_start, match_end = match.span() 159 160 function_text = find_object_from_startpoint(curr_substring, match.span()[1]) AttributeError: 'NoneType' object has no attribute 'span'y me pregunto porque? ¿Alguien puede ayudarme? Estoy ejecutando este fragmento en una consola ipython (IPython versión 7.22.0) con Python 3.8.8 en un entorno conda.
Encontré este problema, pytube v11.0.1. Es un poco tarde para mí, pero si nadie ha enviado una solución mañana, lo comprobaré.
en C:\Python38\lib\site-packages\pytube\parser.py
Cambia esta línea:
152: func_regex = re.compile(r"function\([^)]+\)")
a esto:
152: func_regex = re.compile(r"function\([^)]?\)")
El problema es que la expresión regular espera una función con un argumento, pero supongo que YouTube agregó algunos src que incluyen funciones no parametrizadas.
Tuve el mismo problema, cambié parser.py como en la respuesta anterior, simplemente bifurqué pytube lib en GitHub y cambié el archivo.
Puedes instalar pytube de esta manera:
pip install git+https://github.com/baxterisme/pytubeEn lugar de:
pip install pytubeLa solución más sencilla puede ser:
La versión problemática era 11.0.1 y ahora ya se ha solucionado, por lo que solo necesita actualizar a la versión más nueva y volverá a funcionar bien:
pip install --upgrade pytubeEditar:
Traté de mantener mi solución actualizada, pero comencé a sentir que pytube parece tener problemas con frecuencia y estos errores afectan negativamente a mi proyecto. Así que lo refactoricé y comencé a usar la biblioteca ytdlp a partir de ahora. Entonces, en el momento en que lea esto, es posible que esta solución no funcione para usted.
Por el momento, ya que tenemos este error nuevamente. Puede probar la solución dada aquí
O
Asegúrese de estar en pytube/cipher.py en la línea 293:
Tú cambias
name = re.escape(get_throttling_function_name(js))
para
name = "hha"
gracias jeffery williams