How to download webtoons using WGET
처음에는 자주 잊어버리는 –restrict-file-names=nocontrol 옵션만 정리하려 했다. 그런데, WGET을 이용해서 웹툰을 편하게 다운로드할 수 있겠다라는 생각이 들었다. 시도해봤더니, 왠만한 WGET의 옵션은 다 사용해야 했다.
WGET의 기본적인 사용, 즉 하나의 파일을 다운로드 받기 위해서는 아래처럼 WGET 뒤에 URL을 명시해 주면 된다.
1 |
wget www.naver.com |
그러면, 웹툰의 이미지 파일 하나를 다운로드 해보자.
1 |
wget http://imgcomic.naver.net/webtoon/662774/75/20170131183838_d10004e810d59759afba046e11e67adb_IMAG01_4.jpg |
현재 이 포스트를 작성하고 있는 일자를 기준으로 위의 명령은 403 에러를 뱉어낸다. 아마도 웹툰 서비스 제공자는 우리와 같은 불순한(?) 생각을 가진 사람들로부터 자신의 컨텐츠를 보호하기 위한 최소한의 대책을 마련해 두었을 것이다. 가장 쉽게 생각해 볼 수 있는 건 HTTP 헤더의 USER-AGENT일 것이다. WGET은 이 USER-AGENT를 설정할 수 있는 옵션을 마련해 두고 있다.
1 2 3 4 |
wget -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" wget -U="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" wget --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" |
위의 4가지 방식을 모두 사용할 수 있는데, 가독성을위해 4번과 같은 방식을 사용하겠다. 위와 같이 USER-AGENT를 적용하더라도 403 에러는 여전하다. 다음으로 생각해 볼 수 있는 것은 HTTP 헤더의 Referer일 것이다. WGET은 이번에도 옵션을 만들어 놓았다.
1 2 |
wget --referer "http://comic.naver.com/webtoon/detail.nhn?titleId=662774&no=75&weekday=wed" wget --referer="http://comic.naver.com/webtoon/detail.nhn?titleId=662774&no=75&weekday=wed" |
이미지 파일이 다운로드된다. 그런데, 이미지 파일이 한 두개가 아니다. 이걸 언제 하나씩 다운드로 받는단 말인가? HTML 소스를 파싱하여 다운로드 받을 수 없을까? 당연히 된다.
1 2 3 4 5 |
wget -p -i "http://comic.naver.com/webtoon/detail.nhn?titleId=662774&no=75&weekday=wed" wget -p -i="http://comic.naver.com/webtoon/detail.nhn?titleId=662774&no=75&weekday=wed wget --page-requisites -input-file "http://comic.naver.com/webtoon/detail.nhn?titleId=662774&no=75&weekday=wed" wget --page-requisites -input-file="http://comic.naver.com/webtoon/detail.nhn?titleId=662774&no=75&weekday=wed" |
-input-file 옵션은 로컬 파일에도 적용이 가능함을 기억해두자. 그런데, 불필요한 파일이 너무 많다. 소스를 보니 우리가 필요한 파일의 확장자는 jpg이다. 다운로드 받을 파일의 확장자를 제한하자.
1 2 3 4 |
wget -A jpg wget -A=jpg wget --accept jpg wget --accept=jpg |
제한할 확장자를 추가하기 위해서는 구분자로 콤마(,)를 사용하면 된다. 더불어 위의 옵션과 반대되는 –reject 옵션이 존재한다는 것은 알아두자. 자, 아직까지 불필요한 이미지가 많다. <img> 태그를 적용받는 이미지만 다운로드 받고 싶다.
1 2 |
wget --follow-tags img wget --foloow-tags=img |
아직 좀 부족하지만, 이 정도면 만족스럽다. 다운로드를 더 제한하기 위해서는 정규식을 사용할 수 있는 –accept-regex 옵션을 이용하면 된다. 지금까지 나온 옵션으로 웹툰을 편하게 다운로드 받기 위한 명령은 아래와 같다.
1 |
wget -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" --referer "http://comic.naver.com/webtoon/detail.nhn?titleId=662774&no=75&weekday=wed" -nd -p --accept="jpg" --follow-tags="img" -i http://comic.naver.com/webtoon/detail.nhn?titleId=662774&no=75&weekday=wed |
-nd 옵션은 디렉토리를 만들지 않고 현재 디렉토리에 다운로드 받기 위한 옵션이다. 이 이외에 자주 쓸만한 옵션은 아래와 같다.
1 2 3 4 |
wget --restrict-file-names=nocontrol wget -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" wget --save-cookie="cookie.txt" wget --load-cookie="cookie.txt" |