pytube 에러 수정기: 'title', 'thumbnail_url', 'length' 기능 활성화하기

인터넷에서 pytube를 사용한 웹크롤링 예제 따라하고 있는데 몇몇 기능이 작동하지 않아서 구글링해서 고쳤다. 나처럼 헤매는 사람이 있을지도 모르니 수정하는 방법을 순차적으로 작성해서 올려본다.


1. pytube 재설치하기

파이썬 패키지 인스톨 명령어를 사용해서 pytube를 설치한다.

$ pip install pytube

그런데 title, length, thumbnail_url이 안되는 경우 지웠다가 GitHub에서 바로 땡겨와서 설치하면 해결되는 경우도 있다고 한다.

$ pip uninstall pytube
$ pip install git+git://github.com/nficano/pytube

두 번째 줄 명령어를 쓰면

Collecting git+git://github.com/nficano/pytube
  Cloning git://github.com/nficano/pytube to /private/var/folders/sz/j246fn694zlf37xx9dn9mwwc0000gn/T/pip-req-build-can06r18
  Running command git clone -q git://github.com/nficano/pytube /private/var/folders/sz/j246fn694zlf37xx9dn9mwwc0000gn/T/pip-req-build-can06r18

하면서 설치가 진행된다.

나는 지웠다 다시 깔아도 안되서 다른 방법을 찾았다.


2. ~/pytube/__main__.py 코드 직접 수정하기

pytube 개발자의 GitHub에서 에러 관련된 질문들을 읽어보다가 찾았다.

일단 라이브러리가 설치된 곳에서 pytube__main__.py를 찾는다. 내 컴퓨터에서 해당 파일의 주소는 다음과 같았다.

.pyenv/versions/3.8.0/lib/python3.8/site-packages/pytube/__main__.py

해당 파일을 열면 pytube의 여러 기능들의 익숙한 함수명(?)을 볼 수 있다.

여기에서 thumbnail_url, title, length를 찾아서 다음과 같이 코드를 수정해준다. 코드 수정 내용의 출처는 여기다.

주석 처리한 부분은 원래 코드고, 그 아래에 return부터 )까지가 새로 추가된 부분이다.

(1) thumbnail_url

@property
def thumbnail_url(self):
    """Get the thumbnail url image.

    :rtype: str

    """
    # return self.player_config_args['thumbnail_url']
    return (
        self.player_config_args
        .get('player_response', {})
        .get('videoDetails', {})
        .get('thumbnail', {})
        .get('thumbnails', [])[0]
        .get('url')
    )

(2) title

@property
def title(self):
    """Get the video title.

    :rtype: str

    """
    # return self.player_config_args['title']
    return (
        self.player_config_args
        .get('player_response', {})
        .get('videoDetails', {})
        .get('title')
    )

(3) length

@property
def length(self):
    """Get the video length in seconds.

    :rtype: str

    """
    # return self.player_config_args['length_seconds']
    return (
        self.player_config_args
        .get('player_response', {})
        .get('videoDetails', {})
        .get('lengthSeconds')
    )

3. 결과 확인

실행 결과는 다음과 같이 나온다.

>>> from pytube import YouTube
>>> yt = YouTube("https://www.youtube.com/watch?v=QTjZJzYWzEU")
>>> yt.thumbnail_url
'https://i.ytimg.com/vi/QTjZJzYWzEU/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLBQHfWmE2XWxkPj0NXL6z8N0cNqnQ'
>>> yt.title
'[풀버전] ♬ 싫다고 말해(Nightmare Ver.) - (여자)아이들 @3차 경연 컴백전쟁 : 퀸덤 8화'
>>> yt.length
'273'
>>>

터미널 화면도 캡쳐해보았다. Capture

Profit!!

여기까지 읽은김에 예제에 사용한 동영상이 뭔지 한 번 봅시다.

(여자)아이들 최고 ㅠㅠ….





Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • MAC에서 Manim 설치하기
  • Python 코드 짜깁기: Google News 검색 결과 스크랩해서 저장하기
  • macOS 다시 설치하고 설정하기 01
  • Python으로 수열 계산 구현
  • Think Python 2nd edition 읽는 포스트: Chapter 03, 'Functions'