일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Operating System
- 백준 러스트
- Reversing
- 러스트
- 자바 기초
- C
- 운영체제
- Rust
- 우분투
- data communication
- OS
- java
- 파이썬 첼린지
- 러스트 프로그래밍 공식 가이드
- 데이터베이스
- 파이썬 알고리즘
- 오라클
- 자바
- 데이터 통신
- ubuntu
- 오라클DB
- 백준
- 파이썬
- 자바 개념
- Python
- Database
- Python challenge
- 알고리즘
- 파이썬 챌린지
- 러스트 예제
- Today
- Total
IT’s Portfolio
[Python] 파이썬 웹 크롤링으로 롤 전적검색 프로그램을 만들어보자 본문
요새 웹 크롤링에 꽂혀서 많은 것을 만들어보고 있다.
그 중 롤 전적검색 프로그램을 만들어보려고 한다.
준비물 : python, requests 라이브러리, bs4 라이브러리, op.gg사이트, 당신의 뇌
import와 변수선언
import requests
from bs4 import BeautifulSoup
Name = input("소환사명을 입력하세요: ")
SummonerName = ""
Ranking = ""
TierUnranked = ""
LeagueType = []
Tier = []
LP = []
Wins = []
Losses = []
Ratio = []
requests와 bs4의 BeautifulSoup을 import.
소환사명을 입력받고 저장할 Name 변수선언.
다른 변수들은 귀찮으니 설명은 스킵하고 나머지 변수선언. 영어를 읽을 줄 안다면 어떤 변수인지 짐작이 갈 것이다.
데이터 수집 대상 url과 Header값 변경 및 requests, BeautifulSoup 설정
url='https://www.op.gg/summoner/userName=' + Name
hdr = {'Accept-Language': 'ko_KR,en;q=0.8', 'User-Agent': ('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Mobile Safari/537.36')}
req = requests.get(url, headers=hdr)
html = req.text
soup = BeautifulSoup(html, 'html.parser')
Header값에 Accept-Language을 ko_KR,en;q=0.8로 설정해두면 편하다.
Accept-Language를 변경하지 않으면 파싱해오는 데이터가 영어로 파싱된다.
참고로 User-Agent를 모바일로 설정해두면 프로그램 실행시간을 줄일 수 있다.
웹 크롤링 프로그램을 제작할 때 크롬을 기준으로 F12를 눌러 개발자 도구를 연 후
빨간 동그라미 쳐진 버튼(Toggle device toolbar)을 누르고 새로고침을 하면 모바일 버전의 사이트가 나온다.
req = request.get(url, header=hdr)
url과 Header값을 가지고 서버에게 GET 요청을 하고 받는 html 소스를 req에 저장.
html = req.text
req 변수에 저장되어있는 html 소스를 html로 가져온다.
soup = BeautifulSoup(html, 'html.parser')
BeautifulSoup에 html의 값은 html이라 html.parser를 사용해야함.
크롤링
# 소환사 이름 크롤링
for i in soup.select('div[class=SummonerName]'):
SummonerName = i.text
# 랭킹 크롤링
for i in soup.select('span[class=ranking]'):
Ranking = i.text
# 언랭 판별용 티어 크롤링
TierUnranked = soup.select('div.Cell')
# 리그 타입 크롤링
for i in soup.select('div[class=LeagueType]'):
LeagueType.append(i.text)
# 티어 크롤링
for i in soup.select('div[class=Tier]'):
Tier.append(i.text)
# 리그 포인트 크롤링
for i in soup.select('div[class=LP]'):
LP.append(i.text)
# 승리 패배 판수 크롤링
for i in soup.select('span[class=Wins]'):
Wins.append(i.text)
for i in soup.select('span[class=Losses]'):
Losses.append(i.text)
# 승률 크롤링
for i in soup.select('span[class=Ratio]'):
Ratio.append(i.text)
나머지는 비슷하니 하나만 설명하겠음.
for i in soup.select('div[class=LeagueType]')
soup에서 div태그 LeagueType클래스를 모두 찾아라
조건식 및 정보 출력
if SummonerName != "":
check = input(SummonerName + "님의 솔로랭크 정보가 궁금하시면 '솔랭'을, 자유랭크 정보가 궁금하시면 '자랭'을 입력해주세요: ")
if check == '솔랭':
if 'Unranked' in str(TierUnranked[0]):
print("==================================")
print(SummonerName + "님은 솔로랭크 Unranked입니다.")
print("==================================")
else:
print("==================================")
print(SummonerName + "님의 솔로랭크 정보입니다.")
print("==================================")
print("티어: " + Tier[0].strip('\n\t'))
print("LP: " + LP[0])
print("승/패: " + Wins[0] + " " + Losses[0])
print("승률: " + Ratio[0])
elif check == '자랭':
if 'Unranked' in str(TierUnranked[1]):
print("==================================")
print(SummonerName + "님은 자유랭크 Unranked입니다.")
print("==================================")
else:
print("=====================================")
print(SummonerName + "님의 자유랭크 정보입니다.")
print("=====================================")
print("티어: " + Tier[1].strip('\n\t'))
print("LP: " + LP[1])
print("승/패: " + Wins[1] + " " + Losses[1])
print("승률: " + Ratio[1])
else:
print("Error! 정확하게 입력해주세요.")
else:
print("소환사 정보가 없습니다.")
만약 크롤링해온 SummonerName 문자열이 비어있지 않다면 솔랭정보 및 자랭정보 물어보기.
만약 check 문자열이 솔랭이라면
만약 TierUnranked[0]에 Unranked라는 문자열이 포함되어있다면 솔로랭크 Unranked 문자열 출력.
포함되어있지 않다면 솔로랭크 정보 출력.
만약 check 문자열이 자랭이라면
만약 TierUnranked[1]에 Unranked라는 문자열이 포함되어있다면 자유랭크 Unranked 문자열 출력.
포함되어있지 않다면 자유랭크 정보 출력.
만약 check 문자열이 솔랭과 자랭이 아니라면 에러 문자열 출력.
만약 크롤링해온 SummonerName 문자열이 비어있다면 소환사 정보가 없습니다 문자열 출력.
실행결과
제작 후기
존나 재밌다 ㅋㅋ
이게 인생인가?
'Development Study > Python' 카테고리의 다른 글
[Python] maketrans() 함수 (0) | 2019.11.20 |
---|---|
[Python] isdecimal(), isdigit(), isnumeric() 함수에 대해서 (3) | 2019.11.05 |
[Python] 파이썬 웹 크롤링으로 네이버 실시간 검색어를 파싱해보자 (0) | 2019.11.03 |
[Python] 파이썬 웹 크롤링(Web Crawling) 간단한 기본 상식 (0) | 2019.11.02 |
파이썬(Python)을 시작하기 전에 (2) | 2019.10.17 |