ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인프런 동영상 웹 스크래핑하기 - 3 : 네트워크 분석 - 1
    개발/웹크롤링 2022. 1. 10. 18:57

    이번 시간에는 네트워크 분석을 통해 동영상을 다운로드하는 과정을 추적해보겠습니다. 네트워크 분석이라고는 하지만 깊은 내용은 아닙니다. 그래도 기본적인 http 지식은 있어야 잘 이해하고 활용할 수 있습니다.

    우선 아무 강의나 가서 한 번 영상을 시청해봅니다.

    강의를 시청해줍니다.

    이제 여기서 개발자 도구(F12)를 열어줍니다.

    F12를 눌러서 개발자모드 열기

    이제 위의 메뉴 중 "Network"로 들어갑니다.

    음... 그런데 정보가 다 안 나타난 거 같네요. 새로고침을 눌러서 처음부터 한 번 봅시다.

    이제야 다 나타나는군요. 이제 자세한 사항들을 살펴봅니다.

    보이시나요? 반복적으로 웬 외계어 같은 비슷한 요청이 오가고 있군요. 동영상 같이 큰 파일들은 보통 분할해서 주고 받기 때문에 이것이 동영상 관련된 GET 요청일 가능성이 높습니다. 이제 하나하나 살펴봅니다.

    URL을 자세히 들여다 보면, vod.inflearn.com이 보이고, 960x540p, 30Hz가 보입니다. 이로써 동영상인 것이 거의 확실해 보이는군요. 그리고 _0014, _0015와 같이 인덱스가 매겨진 것으로 보아 수 초 단위로 분할된 것 같습니다.

     

    이제 이와 동일한 요청을 보내기 위해 python 인터프리터를 켜줍니다. 파이썬에는 requests라는 라이브러리가 있는데, 이것으로 기본적인 GET, POST 요청을 보낼 수 있습니다. 다음과 같이 코드를 작성해줍니다. 참고로 아나콘다에 기본 내장되어있는 라이브러리입니다.

    >>> import requests
    >>> url = 'https://vod.inflearn.com/4667229c-9804-4...' # 아까 봤던 url을 붙여넣기
    >>> response = requests.get(url=url)
    >>> response.status_code
    200

    일단 그냥 요청해봤는데 잘 되는군요. 별도의 헤더가 필요 없어서 다행입니다. 이제 response의 body 데이터를 읽어볼까요?

    >>> response.text
    'G@\x00\x1d\x00\x00�\r\x00\x01�\x00\x00\x00\x01��-Px\x04��...

    이런, 웬 외계어가 나옵니다. 이렇게 외계어가 나오면 잘 되었다는 소리입니다. 이제 response에 있는 데이터를 파일로 저장해보겠습니다. response.content를 통해 바이너리 형식으로 받아올 수 있습니다.

    >>> with open('c:/src/test.mp4', 'wb') as f:
    ...   f.write(response.content)
    ...
    175592

     이제 src 폴더로 가서 확인해봅니다.

    동영상 재생까지 잘 되는군요

    동영상이 잘 다운로드받아진 것을 확인할 수 있습니다.

     

    오늘 정말 많은 것을 해봤는데요, 그래도 아직 뭔가 부족하다는 것을 알 수 있습니다. 다음 시간에는 분할된 url의 메타 정보가 담긴 get 요청을 추적하고, selenium-wire를 이용하여 자동화하는 방법을 살펴보겠습니다.

Designed by Tistory.