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

Updated:

토렌트(마그넷) 자동 다운로드 프로젝트 - torrent_web_scraper는 토렌트 파일을 자동으로 다운로드 해주는 웹크롤러 파이썬 스크립트다. TV 프로그램을 다운로드 받기 위해 매번 토렌트 사이트를 접속하며 토렌트 시드 파일 다운로드 받기가 귀찮아서 자동으로 다운로드 하는 파이썬 코드 한번 짜볼까? 해서 시작한 토이프로젝트다.

torrent_web_scraper를 설정해두면, 토렌트 다운로드를 위해 토렌트 사이트를 방문할 필요가 없어지며, 자동으로 TV 프로그램을 다운로드 해줘서 편리하다. 본 프로젝트는 GitHub geekdifferent에서 시작을 했으며, GitHub 아이디 정리 차원에서 GitHub devinlife로 둥지를 옮겼으니, 이점 참고하면 되겠다.

torrent_web_scraper의 자세한 소개와 설치법(사용법)이 아래에 이어진다.

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

1. torrent_web_scraper 소개하기

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

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

torrent_web_scraper를 초기 설정을 완료하면, local_machine_configuration.json 파일과 program_list.py 파일에서 설정 내용을 가져온다. local_machine_configuration.json 파일에는 로컬 컴퓨터의 transmission 정보가 담겨있고 program_list.py 파일에는 다운로드를 진행할 TV 프로그램 정보가 담겨있다. 이 TV 프로그램 정보를 기반으로 새로 업로드 되었는지 토렌트 사이트를 검색한다. 토렌트 사이트의 예능과 시사 그리고 드라마 게시판만 검색 가능하다. 게시판에서 새로운 TV 프로그램 업로드가 확인되면 마그넷 정보를 읽어서 transmission으로 전달하여 다운로드를 진행한다.

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

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

2. 스크립트 동작을 위한 transmission

스크립트는 마그넷 정보만 찾아오고, 마그넷 정보를 토렌트 프로그램인 transmission으로 넘겨서, 다운로드를 시작한다. 따라서, transmission의 설치 및 설정이 필수이다. torrent_web_scraper가 magnet 정보를 얻어오면, 다운로드를 위해서 이 정보를 transmission으로 정보를 전달한다. 그러면 transmission은 다운로드를 수행한다.

torrent_web_scraper와 transmission을 수행할 컴퓨터는 동일 컴퓨터에서도 가능하며 서로 다른 컴퓨터에 설치되어 있어도 가능하다. 단, 서로 다른 컴퓨터에 설치한 경우는 네트워크가 연결되어 있어야 한다.

transmission의 설치 및 설정 방법은 토렌트 머신 설정하기를 참고하면 되겠다.. 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 my_id:my_pw -a magnet:?xt=urn:btih:9df1d9ce248f9b3db02fb7774939f0077f6984d4
localhost:59090/transmission/rpc/ responded: "success"

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

3. torrent_web_scraper 설치하기

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

3.1 torrent_web_scraper 스크립트 다운로드

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

$ git clone https://github.com/devinlife/torrent_web_scraper

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

3.2 torrent_web_scraper 초기 구성 스크립트

코드 준비가 되었으면 아래처럼 초기 구성 스크립트를 실행한다.

$ cd torrent_web_scraper
$ setup_script.sh

스크립트 내용을 보시면 virtualenv를 사용해서, python3.7 기반의 환경을 구성한다. 필요한 파이썬 패키지들은 requirements.txt 파일에 기재가 되어 있고, 자동으로 설치하게 된다. 혹시 수동으로 환경 설정을 하고자 한다면, setup_script.sh 파일을 참고해서 진행하면 된다.

setup_script.sh 파일 수행이 완료되면 이제, 컴퓨터 마다 환경 설정을 잡아준다. local_config/web_scraper_settings.json 설정 파일에서 아래 부분을 찾아서 본인의 transmission 정보를 기입한다. 윗부분에서 확인했던 transmission의 id, pw, rpc port를 본인 컴퓨터의 설정대로 기재합니다.

아래는 예제이니, 참고하여 본인의 transmission 구동 환경을 기반으로 정보를 기입해준다.

"trans-host": "192.168.0.1",
"trans-id": "pi",
"trans-port": "9091",
"trans-pw": "transpw"

3.3 web_scraper_program_list.py 파일 설정하기

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

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

4. torrent_web_scraper 동작 확인

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

$ ./execute_scrapers.sh 

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

5. torrent_web_scraper 자동 실행 등록

torrent_web_scraper는 토렌트 사이트를 스크랩하며 설정에 맞는 마그넷을 tranmission에 전달한다. 따라서, torrent_web_scraper 실행을 10분 단위로 실행할 수 있게 crontab에 설정해두면 torrent_web_scraper는 주기적으로 토렌트 사이트를 방문하여 새로 등록된 마그넷 파일이 있는지 확인하고, 자동으로 다운로드를 해준다.

본인은 아래와같이 설정하고 사용 중이니, 참고하여 설정해보자.

*/10 * * * * /home/pi/torrent_web_scraper/execute_scrapers.sh >> /home/pi/S_Samba/.log/01_torrent_crawler.txt 2>&1

crontab에 대해 경험이 없어서 정보가 필요하면 cron 설정하기(예약 작업)를 참고해보자.

6. torrent_web_scraper 팁

torrent_web_scraper는 local_config/local_machine_configuration.json 파일에 어느 게시물까지 스크랩을 수행했는지 게시물 id를 기재해둔다. 게시물 id를 확인해서 이미 확인한 게시물은 다시 스크랩을 수행하지 않는다. 스크랩을 다시 수행하고 싶으면 history 항목을 0으로 변경해야한다.

다운로드를 진행한 토렌트 정보는 local_config/magnet_history.csv 파일에도 저장을 한다. 어떤 마그넷 정보를 다운로드했는지 기재하고 중복 다운로드는 진행하기 않도록 하기 위함이다. 그래서 한번 다운로드했던 마그넷을 다시 다운로드하기 위해서는 magnet_history.csv 파일에서는 재다운로드 하려는 마그넷 정보를 지워줘야 한다.



Leave a comment