반응형

네이버 동영상 크롤링

완료 누르기 전에 미리보기 눌렀다가 실수로 작성한글 날려서 처음부터... 덕분에 하루늦게 올립니다.

시작하기 전에

크롤링 공부를 위한 자료입니다. 데이터 수집을 위한 다양한 방법을 소개하기 위한 포스터로 개인의 공부 등을 위해서만 아래 내용을 사용해주시면 감사하겠습니다.

네이버를 포함하여 웹서버에 과도한 트래픽을 발생시키거나, 다운받은 영상을 공유할 경우 영업방해와 저작권위반등에 문제가 발생할 수 있습니다.

이에따른 문제에 대해서는 책임지지 않습니다.

 

1. URL 얻어오기

여직까지 URL을 찾는다고 표현을 해왔는데, 이번에는 얻어온다고 표현하겠습니다.

15초 광고 후 재생의 경우에는 확인해보니 광고가 재생되는 시점에 웹브라우저가 서버로부터 광고 후 재생될 영상의 url을 전송받는 것을 확인할 수 있었습니다.

 

크롬 네트워크

[ 크롬 -> 검사 -> 네트워크 ]로 들어가보면 위와같은 화면을 볼 수 있습니다.

확인해보니 이 시점에 영상의 url을 전송받으며, 광고가 끝난 후 영상을 전송받는 것을 확인 할 수 있었습니다.

 

영상의 URL을 담은 응답메시지

위 화면에서 "source" : "~~~" 라고 되어있는 부분이 영상의 URL이 되는 부분입니다.

확인해보니 영상의 해상도에 따라서 URL이 서로 다른것을 볼 수 있었습니다.

 

저 응답메시지를 직접 파이썬에서 불러와서 확인하면 좋겠지만, 아직미숙해서...

 

저는 요청메시지를 그대로 갖고와서 서버로부터 응답메시지를 받아서 처리하는 방법으로 가보겠습니다.

 

2. 요청메시지(Request)

요청메시지를 먼저 확인해보겠습니다. 

 

요청메시지

GET 메서드를 이용해서 전송되는 요청메시지의 파라미터들은 위와같습니다.

일부 내용은 요청메시지마다 중복되는 것들이겠지만, 영상의 종류에 따라서 내용이 많이 다를 수 있기 때문에 파라미터들에 들어갈 내용을 분석해보지는 않겠습니다.

 

저 파라미터 내용은 나중에 심심하면 어떻게 만들어지는지 한번 하나씩 분석해보겠습니다.

 

어찌되었든, 우리의 브라우저에서 저러한 메시지를 웹서버로 전송하기 때문에, 브라우저 로그를 기록하여 요청메시지를 얻어보겠습니다.

 

브라우저 로그

위와같은 방식으로 브라우저를 실행하면 위와같이 전송된 요청메시지를 확인 할 수 있습니다.

 

3~4초에 800개정도의 메시지가...보내졌습니다...

 

우리는 이 많은 메시지에서 원하는 메시지(URL을 응답받을 수 있는 메시지)를 찾는 작업을 해야합니다.

 

흠...

 

요청파라미터의 내용을 보셔서 아시겠지만, 전송되는 메시지의 길이가 상당히 긴 편입니다.

따라서 메시지 길이가 6000자 이하면 버리도록 하겠고, 또하나 메시지에 

 

[ "url":"(https://apis.naver.com/rmcnmv/rmcnmv/vod/play ] 라는 내용이 존재해야합니다. 요청메시지의 기본내용이니까요. (혹시 틀리면 나중에 수정하겠습니다.)

 

따라서 위의 조건을 사용해서 원하는 메시지를 찾아보겠습니다.

 

요청메시지 확인하기

위와같이 실행해보니까 딱 하나, 요청메시지가 걸립니다. 빈 리스트들은 메시지가 6000이상이지만, 정규표현식에서 안잡히는 녀석들입니다.

 

3. URL 응답받기

마지막으로 매우 간단한 작업이 남았습니다.

import requests 를 해주신 후 앞에서 찾아낸 요청메시지를 전송하고, 응답메시지를 받으면 거기서 원하는 정보를 찾으면 끝입니다.

 

응답메시지에서 URL 확인

위와같이 원하는 부분을 추출할 수 있습니다. (JSON을 이용해도 무관합니다.)

 

여러개의 URL에 검색되는 것은 말씀드린 것처럼, 해상도별로 URL이 조금씩 다르기 때문입니다.

 

우리는 가장 고해상도를 필요로 함으로 마지막 append부분을 아래처럼 바꿔주겠습니다.

 

URL 확인

끝~

 

깔끔하게 하나의 URL을 얻어왔습니다.

 

결과화면

 

 

일단 여기까지!

 

에혀...

 

확인해보니까 15초 후 SKIP과 같은 방식도 위와같이 광고시간에 URL을 전송받더군요...

(왜 생각을 못했지...)

 

따라서 그냥 위의 코드만 이용해서 url을 얻어와도 될테고, 혹은 서버에 응답요청 한번이라도 덜주겠다 싶으시면, 그냥 skip버튼 활성화해서 클릭하셔도 될꺼같습니다...

 

큰 차이는 없을꺼 같네요...

 

다음에는 코드정리와 멀티프로세싱을 다루겠습니다.

반응형

+ Recent posts