토렌트(마그넷) 자동 다운로드 프로젝트 - torrent_web_scraper

Updated:

TV 프로그램을 다운로드 받기 위해 매번 토렌트 사이트를 접속하며 토렌트 시드 파일 다운로드 받기가 귀찮으셨지요? 원하는 TV 프로그램을 토렌트 사이트에 업로드 될때마다 자동으로 다운로드해주면 얼마나 편리할까요? 토렌트(마그넷) 자동 다운로드 프로젝트 - torrent_web_scraper는 원하는 토렌트 파일을 자동으로 다운로드 해주는 웹스크랩퍼(웹크롤러)입니다. torrent_web_scraper를 사용하면 토렌트(마그넷) 다운로드를 위해 토렌트 사이트를 방문할 필요가 없어집니다. torrent_web_scraper의 자세한 소개와 사용법을 확인해보세요.

토렌트 자동 다운로드 프로젝트 - torrent_web_scraper 실행 환경
실행 OS : 윈도우, 리눅스(우분투, 라즈비안) 등
실행 언어 : Python3

1. torrent_web_scraper 소개하기

torrent_web_scraper는 매일 새로 업로드되는 예능 프로그램을 다운로드하기 위해 토렌트 사이트를 돌아다니기 귀찮아서 제작을 구상하게 되었습니다. torrent_web_scraper의 동작 개념도는 아래와 같습니다.

토렌트 자동 다운로드 torrent_web_scraper 개념도

torrent_web_scraper를 실행하면, web_scraper_settings.json 파일과 web_scraper_program_list.py 파일에서 설정 내용을 가져옵니다. web_scraper_settings.json 파일에는 로컬 컴퓨터의 transmission 정보가 담겨있고 web_scraper_program_list.py 파일에는 다운로드를 진행할 TV 프로그램 정보가 담겨있습니다. torrent_web_scraper는 다운로드할 TV 프로그램 정보가 새로 업로드 되었는지 토렌트 사이트를 검색합니다. 토렌트 사이트의 한국예능 카테고리와 한국시사/다큐 카테고리 게시판만 검색 가능합니다. 게시판에서 새로운 TV 프로그램 업로드가 확인되면 마그넷 정보를 읽어서 transmission으로 전달하여 다운로드를 진행합니다. 웹 스크래핑을 수행할 토렌트 사이트는 2개입니다. 2개 사이트를 스크랩하는 이유는 사이트 서버가 다운되는 상황을 대비하기 위함이면서, 2개 사이트 중에 빨리 올라오는 토렌트 파일을 다운로드 하기 위해서 입니다.

torrent_web_scraper를 주기적으로 실행하게 설정해두면, 토렌트 사이트를 방문하여 새로 등록된 마그넷 파일이 있는지 확인하고, 자동으로 다운로드를 해줍니다. 따라서 토렌트 파일이 업로드 되었는지 토렌트 사이트를 확인할 필요가 없어집니다.

torrent_web_scraper는 파이썬3 기반으로 작성되었으며, 리눅스 기반인 우분투와 라즈베리파이(라즈비안)에서 동작을 확인하였습니다.

주의 토렌트 사이트를 웹 스크래핑하는 것은 불법이 아닙니다. 하지만, 토렌트를 사용하여 TV 프로그램 동영상을 다운로드하는 것은 저작권을 침해하는 불법 행위입니다. 이점을 이해하고 torrent_web_scraper 스크립트를 실행 여부를 결정하세요.

2. 스크립트 동작을 위한 사전 작업

스크립트 동작을 위해 필요한 사전 패키지입니다. 스크립트는 마그넷 정보만 찾아오고, 마그넷 정보를 토렌트 프로그램인 transmission으로 넘겨서, 다운로드를 시작합니다. 스크립트는 python3 기반으로 되어있으며, 웹 스크랩퍼 동작을 위해 파이썬 모듈 beautifulsoup4이 필요합니다. 아래 패키지 리스트 중에 미설치 된 패키지가 있으면, 아래 설치 가이드를 참고로 설치합니다.

  • transmission
  • python3와 beautifulsoup4

본 포스트는 리눅스 사용자 위주로 가이드가 작성되었습니다. 스크립트가 파이썬 기반으로 작성되었기에, 윈도우 환경에서도 동작이 가능합니다. 윈도우에서 본 스크립트를 사용하려는 분들 중에 파이썬에 익숙치 않은 분들을 위해서 윈도우 사용자를 위한 exe 실행 파일과 가이드 페이지를 추가하였습니다. 토렌트(마그넷) 자동 다운로드 프로젝트 - 윈도우용 페이지에서 윈도우 사용자를 위한 정보를 확인할 수 있습니다.

2.1 transmission 설치 및 정보확인

transmission의 설치 및 설정 방법은 설치가이드(11) 토렌트 머신 설정하기를 참고하세요. transmission 설치가 완료되면, 스크립트 동작을 위해 id, pw, rpc port가 필요하니, 웹 클라이언트 접속 설정 정보를 확인해주세요. 뒷부분에 이 정보를 기반으로 torrent_web_scraper 스크립트를 설정합니다.

transmission 설치가 완료되면, 아래와같이 shell에서 transmission-remote rpc-port n username:password -a magnet-link 형태로 명령어를 테스트 했을때 success 응답이 오면 설정 성공입니다.

$ transmission-remote 9091 -n myid:mypw -a magnet:?xt=urn:btih:9df1d9ce248f9b3db02fb7774939f0077f6984d4
localhost:59090/transmission/rpc/ responded: "success"

torrent_web_scraper 스크립트가 웹페이지를 파싱해서 얻어낸 magnet 정보를 transmission-remote를 통해 전달하기 때문에 위 테스트가 성공해야만 torrent_web_scraper 스크립트가 정상 동작합니다.

2.2 beautifulsoup4 설치하기

웹페이지 정보를 파싱하기 위한 모듈인 beautifulsoup4를 설치합니다. torrent_web_scraper 파이썬 스크립트가 beautifulsoup4를 import해서 사용하기 때문에 꼭 설치가 필요합니다. 아래와같이 pip를 사용하여 설치하여 주세요.

$ pip3 install beautifulsoup4
Collecting beautifulsoup4
...
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.6.3

3. torrent_web_scraper 설치하기

이제 torrent_web_scraper 스크립트를 다운로드하고, 설정파일의 내용을 본인 컴퓨터에 맞게 설정하도록 합니다.

3.1 torrent_web_scraper 스크립트 다운로드

아래와같이 git repo 주소를 clone하여 본인 컴퓨터에 다운로드합니다. git repo 주소에 직접 접속하여 파일을 다운로드할 수 있습니다만 업데이트되는 내용을 받아가려면 clone하는 방법이 더 유리할 것입니다.

$ git clone https://github.com/geekdifferent/torrent_web_scraper.git
Cloning into 'torrent_web_scraper'...
remote: Counting objects: 9, done.
...
$ ls torrent_web_scraper/
LICENSE    torrent_web_scraper.py  web_scraper_02.py   web_scraper_program_list.py
README.md  web_scraper_01.py       web_scraper_lib.py  web_scraper_settings.json

파이썬 스크립트 파일들이 다운로드 완료 되었습니다.

3.2 web_scraper_settings.json 파일 설정하기

이제 설정 파일인 web_scraper_settings.json를 편집합니다. 설정 파일에서 아래 부분을 찾아서 본인의 transmission 정보를 기입합니다. 윗부분에서 확인했던 transmission의 id, pw, rpc port를 본인 컴퓨터의 설정대로 기재합니다.

"trans-id": "YOUR_TORRENT_ID",
"trans-port": "YOUR_TORRENT_PORT",
"trans-pw": "YOUR_TORRENT_PW"

아래 설정은 예제입니다. 이를 참고하여 본인 컴퓨터 설정값으로 기재합니다.

"trans-id": "transmission",
"trans-pw": "transmission",
"trans-port": "9091"

3.3 web_scraper_program_list.py 파일 설정하기

이제는 web_scraper_program_list.py에서 title_list 항목을 편집합니다. title_list는 마그넷을 수집할 TV 프로그램 정보를 기입합니다. title은 TV 프로그램 제목을 적습니다. resolution은 동영상 해상도, version은 릴그룹 정보입니다. title, resolution, version 모두 토렌트 사이트의 게시판 제목을 기반으로 string 비교를 수행합니다. title_list에 기입한 내용이 모두 있는 게시판 글의 마그넷을 다운로드하는 것이지요. resolution과 version은 지정하지 않고 싶으면 None으로 기재하면 됩니다. 항목이 기재되어 있지 않으면, 해당 항목은 고려하지 않고 모두 다운로드합니다. web_scraper_program_list.py 파일 안에 참고할 수 있는 예제 설정이 들어있으니, 확인하고 수정하시면 됩니다.

title_list =[
        [ "라디오스타",        ["720"],           ["NEXT"] ],
        [ "썰전",              [None],            ["NEXT"] ],
        [ "PD 수첩",           ["720"],           ["NEXT"] ],
        ...

4. torrent_web_scraper 동작 확인

모든 설정이 완료되면 아래와같이 스크립트를 동작시켜 봅니다. 설정 파일에 기대한 대로 조건에 맞는 마그넷을 찾으면 transmission으로 다운로드를 요청합니다.

$ python3 torrent_web_scraper.py
====================================
=> Try to access site :  torrentboza
site/cate :  torrentboza kortv_ent
lastUpdateId for torrentboza_kortv_ent = 0
page site : torrentboza, cate : kortv_ent, url : https://torrentboza.com/bbs/board.php?bo_table=ent&page=1
newLatestId : 9448
	We want to keep downaloading, go to next step
page site : torrentboza, cate : kortv_ent, url : https://torrentboza.com/bbs/board.php?bo_table=ent&page=2
download check with title :        xxxx.Exxx.180913.720p NEXT
	We want to keep downaloading, go to next step
	===> download torrent : https://torrentboza.com/bbs/board.php?bo_table=ent&wr_id=9414&page=2

transmission으로 마그넷 정보가 넘어가면 자동으로 다운로드를 시작합니다.

5. torrent_web_scraper 사용팁

torrent_web_scraper는 토렌트 사이트를 스크랩하며 설정에 맞는 마그넷을 tranmission에 전달합니다. 따라서, torrent_web_scraper 실행을 10분 단위로 실행할 수 있게 crontab에 설정해두면 torrent_web_scraper는 주기적으로 토렌트 사이트를 방문하여 새로 등록된 마그넷 파일이 있는지 확인하고, 자동으로 다운로드를 해줍니다. crontab 설정 방법은 설치가이드(13) cron 설정하기(예약 작업)를 참고하세요.

torrent_web_scraper는 torrent_scraper_settings.json 파일에 어느 게시물까지 스크랩을 수행했는지 게시물 id를 기재합니다.(json 파일에 history 항목을 참고하세요.) 게시물 id를 확인해서 이미 확인한 게시물은 다시 스크랩을 수행하지 않습니다. 스크랩을 다시 수행하고 싶으면 history 항목을 0으로 기재하여 주세요. 그리고, history 없는 초기 동작은 게시물 페이지를 10개까지만 확인합니다.

transmission으로 전달한 마그넷 정보는 다운로드가 시작됩니다. 이런 정보는 web_scraper_history.csv 파일에도 저장을 합니다. 어떤 마그넷 정보를 다운로드했는지 기재하고 중복 다운로드는 진행하기 않도록 합니다.

그래서 한번 다운로드했던 마그넷을 다시 다운로드하기 위해서는 torrent_scraper_settings.json 파일에서 history 항목을 0으로 설정하고(혹은 파싱할 게시물 id 이전 값으로) web_scraper_history.csv 파일에서는 재다운로드 하려는 마그넷 정보를 지워줘야 합니다.


더 많은 라즈베리파이 이야기 Pi Guide 보러가기


Leave a Comment