네이버 동영상 크롤링
네이버를 시작으로 유튜브와 구글의 동영상 크롤링에 대한 내용을 다룰 예정입니다.
들어가기 전에
크롤링을 통해서 얻은 동영상을 재업로드하는 경우 저작권 위반에 해당될 수 있습니다.
개인 공부용으로 작성된 글입니다. 참고하시는 분들도 공부용으로만 봐주시면 감사하겠습니다.
준비하기
작업환경 : Jupyter notebook
사용 라이브러리 : selenium, urllib
네이버 동영상은 " https://tv.naver.com " 의 동영상을 기준으로 하였습니다.
1. 동영상 저장 확인
먼저 url로 동영상이 저장되는지 확인해보도록 하겠습니다.
간단하게 이전에 다뤘던 구글 이미지 크롤링과 동일한 방법으로 영상 링크를 갖고 와서 저장하는 방법으로 시작해보겠습니다.
크롬의 [검사] 기능을 이용해서 동영상의 소스를 찾아봤습니다.
보이는 것처럼 src 이하의 주소가 동영상의 소스가 됩니다.
해당 동영상 링크를 주소창에 입력하면 위와 같은 화면을 볼 수 있습니다.
해당 영상이 저장이 가능한지 urllib를 이용해서 확인해보겠습니다.
간단하게 저장되네요.(용량은 약 45MB)
2. XPath로 동영상 url 갖고 오기
매번 위와 같은 수작업으로 동영상의 url을 확인하는 방법은 크롤링이라고 할 수 없겠죠.
XPath를 이용해서 동영상의 url을 갖고 와 보겠습니다.
복사해봤더니
//*[@id="rmcPlayer_15550522065636948.video"]
라는 값이 저장되는 것을 볼 수 있었습니다.
위와 같은 형식의 id값은 동영상마다 id값이 다를 수 있기 때문에, id값이 아닌 class나 div 틀을 갖고 오는 방법이 필요합니다.
위와 같이 검사 부분을 보게 되면, id = "rmcPlayer_~~~"라고 되어있는 부분이 있습니다.
동영상의 url을 시작으로 상위의 요소에 붙은 위와 같은 id 값들을 전부 제거하고 다시 XPath 값을 갖고 와 보겠습니다.
중간에 id = "player"라고 되어있는 부분부터 동영상의 url까지의 id값을 제거해주시면 됩니다.(총 3개)
다시 XPath값을 갖고 와서 보니 아래와 같은 값을 얻을 수 있었습니다.
//*[@id="player"]/div/div/div[11]/div[13]/video
div가 반복되는 게 마음에 안 들지만, 일단 넘어가겠습니다.
위의 XPath를 이용해서 url을 얻어와 보겠습니다.
위와 같은 방법으로 동영상의 url을 얻어올 수 있었습니다.
3. 코드 종합
일단 여기까지 코드를 정리해보겠습니다.
위와 같이 몇 줄 안 되는 코드로 원하는 주소의 동영상을 저장할 수 있었습니다.
그럼 이제 몇 가지 문제점을 집고 다음으로 넘아가겠습니다.
4. 문제점 확인
네이버의 동영상을 보기위해 웹페이지에 접속하면 자동으로 영상이 재생됩니다.
다만, 다들 아시겠지만, 영상의 시작전에 볼 수 있는게 있습니다.
바로 광고 입니다. 물론 모든 영상에 광고가 붙지는 않습니다. 아래와 같은 3가지 경우가 있습니다.
1) 광고없음 : 광고가 없는경우 위와같이 time.sleep(2) 정도면 웹페이지가 영상의 링크를 갖고오기까지 충분한 시간이 됩니다. 이상적이죠...
2) 5/15초 광고 후 스킵
3) 15초 광고 후 재생
2와 3의 경우 위의 코드를 그냥 실행하게되면 원하는 동영상이 아니라 광고가 파일로 저장되게됩니다.
때문에 이 문제들을 해결하는 방법을 다음 글에서 보도록 하겠습니다... (지금부터 연구...)
따라서 다음영상은 2번(5/15초 광고 후 스킵)의 문제를 해결하는 방법을 다루겠습니다.
다음으로 3번(15초 광고 후 재생)
마지막으로 멀티프로세싱을 이용하여 원하는 영상들을 한번에 수집하는 방법을 다루겠습니다.
따라서 총 4편을 구성될 예정입니다.
'머신러닝 > 데이터 수집' 카테고리의 다른 글
[파이썬 크롤링] 네이버 동영상 크롤링 (3/4) (Selenium 크롤링) (0) | 2019.04.13 |
---|---|
[파이썬 크롤링] 네이버 동영상 크롤링 (2/4) (Selenium 크롤링) (2) | 2019.04.12 |
파이썬 웹 크롤링 초급(with, Selenium) (2/2) (0) | 2019.01.02 |
파이썬 웹 크롤링 초급(with, Selenium) (1/2) (0) | 2019.01.02 |