프로그래밍/Python

[Python] pytube로 영상 다운로드 시, 발생하는 'NoneType' object has no attribute 'span' 오류

채윤아빠 2023. 1. 26. 09:33
728x90
반응형

문제점 및 증상

"pytube"로 영상 다운로드 시, 다음과 같은 오류가 발생하며 영상 다운로드가 실패하는 문제가 얼마전부터 발생하기 시작했습니다.

YouTube('https://youtu.be/9bZkp7q19f0').streams.first()
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in 
    YouTube('https://youtu.be/9bZkp7q19f0').streams.first()
  File "C:\Dev\Python\Python310\lib\site-packages\pytube\__main__.py", line 296, in streams
    return StreamQuery(self.fmt_streams)
  File "C:\Dev\Python\Python310\lib\site-packages\pytube\__main__.py", line 181, in fmt_streams
    extract.apply_signature(stream_manifest, self.vid_info, self.js)
  File "C:\Dev\Python\Python310\lib\site-packages\pytube\extract.py", line 409, in apply_signature
    cipher = Cipher(js=js)
  File "C:\Dev\Python\Python310\lib\site-packages\pytube\cipher.py", line 43, in __init__
    self.throttling_plan = get_throttling_plan(js)
  File "C:\Dev\Python\Python310\lib\site-packages\pytube\cipher.py", line 411, in get_throttling_plan
    transform_plan_raw = find_object_from_startpoint(raw_code, match.span()[1] - 1)
AttributeError: 'NoneType' object has no attribute 'span'

현재 제가 사용하는 "pytube" 버전은 "12.1.2" 였습니다.


해결 방법

아마도 새로운 공식 버전이 배포되면 해결되리라 예상하지만, 일단은 다음과 같이 "pytube"가 설치된 폴더에서 "cipher.py" 파일을 열어서 411줄을 다음과 같이 수정하면 오류 없이 유튜브 영상의 다운로드가 가능합니다.

    # transform_plan_raw = find_object_from_startpoint(raw_code, match.span()[1] - 1) # original
    transform_plan_raw = js # fix

--

참고자료

"Pytube issue: AttributeError 'NoneType' object has no attribute 'span'":https://github.com/pytube/pytube/issues/1499