토렌트 마그넷 검색기(1)

2018. 12. 26. 00:23프로젝트/토렌트 마그넷 크롤링

준비

-Python 사용

-Window OS

 

구상한 프로그램의 실행 과정 아래와 같습니다.

 

1. 토렌트 사이트 접속

2. 검색어 입력

3. 제목, 마그넷 추출

4. 마그넷 주소를  통한 다운로드

 

코딩에 앞서 우선 파싱 할 사이트를 찾아야 합니다.

검색어를 입력하면 마그넷 주소가 리스트로 나와 번거롭지 않게 파싱이 가능한

'토렌트 왈'이라는 사이트를 선택했습니다.

사이트를 선택했으면 원하는 요소가 들어있는 태그를 확인합니다.

크롬 기준 (ctrl + shift + c)를 눌러 개발자 도구를 열어 html태그를 확인할 수 있습니다.

 

다른 방법으로 아래 사이트에서 어떤 태그에 원하는 정보가 있는지 쉽게 확인 할 수 있습니다.

https://try.jsoup.org/

 

Try jsoup online: Java HTML parser and CSS debugger

 

try.jsoup.org

파싱하기

주소를 불러오고 태그 값들을 가져와야 하기 때문에 라이브러리를 불러왔습니다.

만약 라이브러리가 없으면 cmd -> pip install ~~ 로 설치해야 합니다.

import webbrowser
import urllib.parse
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup

HTML 태그 가져오기

search = input("검색어를 입력하세요 : " ) 
        search = urllib.parse.quote(search) #URL Encoding
        req = Request('https://torrentwal.com/bbs/s.php?k='+str(search)+'&q=', headers={'User-Agent': 'Mozilla/5.0'})
        webpage = urlopen(req).read()
        soup = BeautifulSoup(webpage,"lxml")

검색어를 입력받아서 검색하기 위해 input으로 검색어를 받습니다.

하지만 문자열 그대로 URL에 넣어주면 오류가 나기 때문에 URL 인코딩해줍니다.

 

req에 URL 인코딩한 검색어를 주소에 합쳐서 'Mozilla/5.0' 헤드를 붙여줍니다. (Mozilla/5.0으로 페이지를 열기)

urlopen(req).read()를 통해 페이지의 코드를 모두 불러옵니다.

그리도 원하는 태그를 골라오기 위해 BeautifulSoup를 사용합니다.


글의 제목 가져오기

num = 0  #num 초기값
        for link1 in soup.find_all(name="td",attrs={"class":"subject"}):
            title = link1.select('a')[1] #a태그중 0다음인 1번째 데이터 가져오기
            num = num+1
            print(str(num)+"번, "+title.get_text().strip()) #문자열만 가져오기

soup.find_all로 td 태그의 class가 subject인 것들을 모두 가져와서 link1 변수에 넣었습니다.

그 후 link1에서 select를 이용해 'a' 태그만 다시 가져와서 title 변수에 넣었습니다.

(a 태그에는 글의 제목인 파일명이 들어있습니다.)

위 코드까지 실행하면 아래 그림처럼 나오게 됩니다.

 


마그넷 주소 가져오기

mglist = [] * num #리스트 생성

        for link2 in soup.find_all(name="td",attrs={"class":"num"}):
            try:
                mgnet = link2.select('a')[0]['href'] #a 태그에서 href만 가져오기
            except:
                pass
                #print("href 없음")
            mgnet = mgnet.strip("javascript:Mag_dn('')") #문자열 자르기
            mglist.append(str(mgnet)) #리스트에 넣기

        mgnum = int(input("번호를 선택하세요 (0을 입력하면 처음으로) : " ))

이제 원하는 번호의 마그넷 주소만 가져오면 됩니다. 위의 제목을 가져오는 방법과 같습니다.

파싱하기 전 마그넷 주소를 가져올 리스트를 미리 만들어 줬습니다.

 

 

마그넷 주소를 파싱하면 위와같이 a 태그의 요소인 javascript:Mag~~~~~문자열을 얻을 수 있습니다.

하지만 토렌트에서는 작은따옴표 사이의 코드 값만 쓰이기 때문에  쓰레기 값을 .strip을 이용해

코드 값만 남겨주는 작업이 필요합니다.


마그넷으로 토렌트 다운로드

mglink = mglist[mgnum]
webbrowser.open("magnet:?xt=urn:btih:"+mglink) 

마그넷 실행은 magnet:?xt=urn:btih: 이후 코드 값을 붙여 사용하고 주소창에 입력하면 실행 가능합니다.

따라서 코드를 추가한 마그넷 주소를 웹 브라우저에서 열어줍니다. 

 

https://github.com/Yeowoolee/Torrent-magnet-crawler/blob/master/%ED%8C%8C%EC%8B%B1.py

 

Yeowoolee/Torrent-magnet-crawler

Pytest. Contribute to Yeowoolee/Torrent-magnet-crawler development by creating an account on GitHub.

github.com