2018. 12. 26. 00:23ㆍ프로젝트/토렌트 마그넷 크롤링
준비
-Python 사용
-Window OS
구상한 프로그램의 실행 과정 아래와 같습니다.
1. 토렌트 사이트 접속
2. 검색어 입력
3. 제목, 마그넷 추출
4. 마그넷 주소를 통한 다운로드
코딩에 앞서 우선 파싱 할 사이트를 찾아야 합니다.
검색어를 입력하면 마그넷 주소가 리스트로 나와 번거롭지 않게 파싱이 가능한
'토렌트 왈'이라는 사이트를 선택했습니다.
사이트를 선택했으면 원하는 요소가 들어있는 태그를 확인합니다.
크롬 기준 (ctrl + shift + c)를 눌러 개발자 도구를 열어 html태그를 확인할 수 있습니다.
다른 방법으로 아래 사이트에서 어떤 태그에 원하는 정보가 있는지 쉽게 확인 할 수 있습니다.
파싱하기
주소를 불러오고 태그 값들을 가져와야 하기 때문에 라이브러리를 불러왔습니다.
만약 라이브러리가 없으면 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