티스토리 뷰

728x90

[이번에는 챔피언을 입력하면 롤 카운터를 출력해주는 봇을 만들어 보도록 하겠습니다.]


 

먼저 카운터를 가져올 사이트를 크롤링합니다. (이번 포스팅에서는 롤 인벤 사이트를 참고하여 제작하겠습니다.)

먼저 사이트 url 양식을 살펴보면 lol.inven.co.kr/dataninfo/counter/list.php?code=19 <- 가렌 

                                            lol.inven.co.kr/dataninfo/counter/list.php?code=1 <- 아칼리

요런 식으로 정리되어 있습니다. 각 챔피언에 코드가 할당되어 있는데, 규칙을 찾지 못해서 손수 딕셔너리를 제작하였습니다. ㅠㅠ

    ChampNumberSet = {'아칼리':'1',
                '알리스타':'2', 
                '아무무': '3',
                '애니비아' : '4',
                '애니' : '5',
                '애쉬' : '6',
                '블리츠크랭크' : '7',
                '블츠' : '7',
                '브랜드' : '8',
                 '케이틀린' : '9',
                 '카시오페아' : '10',
                  '초가스' : '11',
                  '코르키' : '12',
                  '문도 박사' : '13',
                  '문도' : '13',
                  '이블린' : '14',
                  '이즈리얼' : '15',
                  '피들스틱' : '16',
                  '갈리오' : '17',
                  '갱플랭크' : '18',
                  '가렌' : '19',
                  '그라가스' : '20',
                  '하이머딩거' : '21',
                  '이렐리아' : '22',
                  '잔나' : '23',
                  '자르반 4세' : '24',
                  '자르반' : '24',
                  '잭스':'25',
                  '카르마':'26',
                  '카서스':'27',
                  '카사딘':'28',
                  '카타리나':'29',
                  '케일':'30',
                  '케넨':'31',
                  '코그모':'32',
                  '르블랑':'33',
                  '리 신':'34',
                  '리신':'34',
                  '럭스':'35',
                  '말파이트':'36',
                  '말자하':'37',
                  '마오카이':'38',
                  '마스터 이':'39',
                  '마스터이':'39',
                  '마이':'39',
                  '미스 포츈':'40',
                  '미스포츈':'40',
                  '미포':'40',
                  '모데카이저':'41',
                  '모데':'41',
                  '모르가나':'42',
                  '몰가':'42',
                  '나서스':'43',
                  '니달리':'44',
                  '녹턴':'45',
                  '누누와 윌럼프':'46',
                  '누누':'46',
                  '올라프':'47',
                  '판테온':'48',
                  '뽀삐':'49',
                  '람머스':'50',
                  '레넥톤':'51',
                  '럼블':'52',
                  '라이즈':'53',
                  '샤코':'54',
                  '쉔':'55',
                  '신지드':'56',
                  '사이온':'57',
                  '시비르':'58',
                  '소나':'59',
                  '소라카':'60',
                  '스웨인':'61',
                  '타릭':'62',
                  '티모':'63',
                  '트리스타나':'64',
                  '트타':'64',
                  '트런들':'65',
                  '트린다미어':'66',
                  '트린':'66',
                  '트위스티드 페이트':'67',
                  '트페':'67',
                  '트위스티드페이트':'67',
                  '트위치':'68',
                  '우디르':'69',
                  '우르곳':'70',
                  '베인':'71',
                  '베이가':'72',
                  '블라디미르':'73',
                  '블라디':'73',
                  '워윅':'74',
                '신 짜오':'75',
                '신짜오':'75',
                '질리언':'76',
                '레오나':'77',
                '오리아나':'78',
                '탈론':'79',
                '오공':'80',
                '요릭':'81',
                '스카너':'82',
                '리븐':'83',
                '제라스':'84',
                '그레이브즈':'85',
                '그브':'85',
                '쉬바나':'86',
                '피즈':'87',
                '볼리베어':'88',
                '아리':'89',
                '빅토르':'90',
                '세주아니':'91',
                '직스':'92',
                '노틸러스':'93',
                '피오라':'94',
                '룰루':'95',
                '헤카림':'96',
                '바루스':'97',
                '다리우스':'98',
                '드레이븐':'99',
                '제이스':'100',
                '자이라':'101',
                '다이애나':'102',
                '렝가':'103',
                '신드라':'104',
                '카직스':'105',
                '엘리스':'106',
                '제드':'107',
                '나미':'108',
                '바이':'109',
                '쓰레쉬':'110',
                '퀸':'111',
                '자크':'112',
                '리산드라':'113',
                '아트록스':'114',
                '루시안':'115',
                '징크스':'116',
                '야스오':'117',
                '벨코즈':'118',
                '브라움':'119',
                '나르':'120',
                '아지르':'121',
                '칼리스타':'122',
                '렉사이':'123',
                '바드':'124',
                '에코':'125',
                '탐 켄치':'126',
                '탐켄치':'126',
                '킨드레드':'127',
                '일라오이':'128',
                '진':'129',
                '아우렐리온 솔':'130',
                '아우렐리온솔':'130',
                '탈리야':'131',
                '클레드':'132',
                '아이번':'133',
                '카밀':'134',
                '라칸':'135',
                '자야':'136',
                '케인':'137',
                '오른':'138',
                '조이':'139',
                '카이사':'140',
                '파이크':'141',
                '니코':'142',
                '사일러스':'143',
                '유미':'144',
                '키아나':'145',
                '세나':'146',
                '아펠리오스':'147',
                '세트':'148',
                '릴리아':'149',
                '요네':'150',
                '사미라':'151',
                '세라핀':'152',
                '렐':'153'
                }

그럼 이제 카운터를 크롤링 해봐야겠죠? 

 

확인해보면 champList에 해당 카운터 이름들이 포함된 것을 확인할 수 있습니다.

 

카운터를 크롤링하는 코드는 아래와 같습니다.

import requests,time
from bs4 import BeautifulSoup
import re

CounterChampList_F = []
test_url = "http://lol.inven.co.kr/dataninfo/counter/list.php?code=1"            #카운터 번호 (ex> 아칼리 = 1)
resp = requests.get(test_url)
html = BeautifulSoup(resp.content, 'html.parser')

rel = html.find('div', {'class': 'champList'})
CounterChamp = str(rel).split('selectCounter')
del CounterChamp[0]
del CounterChamp[0]
for i in range(0,len(CounterChamp)):
    if i % 2 == 0:
        champName = CounterChamp[i].replace('(\'\');">','')
        champName = champName.split('</a')[0]
        print(champName)
        CounterChampList_F.append(champName)
        print("========================================")

champList에서 가져온 정보를 슬라이싱으로 가공해줍니다.

import requests,time
from bs4 import BeautifulSoup

champ = input('챔피언이름:')

ChampNumberSet = {'아칼리':'1',
                '알리스타':'2', 
                '아무무': '3',
                '애니비아' : '4',
                '애니' : '5',
                '애쉬' : '6',
                '블리츠크랭크' : '7',
                '블츠' : '7',
                '브랜드' : '8',
                 '케이틀린' : '9',
                 '카시오페아' : '10',
                  '초가스' : '11',
                  '코르키' : '12',
                  '문도 박사' : '13',
                  '문도' : '13',
                  '이블린' : '14',
                  '이즈리얼' : '15',
                  '피들스틱' : '16',
                  '갈리오' : '17',
                  '갱플랭크' : '18',
                  '가렌' : '19',
                  '그라가스' : '20',
                  '하이머딩거' : '21',
                  '이렐리아' : '22',
                  '잔나' : '23',
                  '자르반 4세' : '24',
                  '자르반' : '24',
                  '잭스':'25',
                  '카르마':'26',
                  '카서스':'27',
                  '카사딘':'28',
                  '카타리나':'29',
                  '케일':'30',
                  '케넨':'31',
                  '코그모':'32',
                  '르블랑':'33',
                  '리 신':'34',
                  '리신':'34',
                  '럭스':'35',
                  '말파이트':'36',
                  '말자하':'37',
                  '마오카이':'38',
                  '마스터 이':'39',
                  '마스터이':'39',
                  '마이':'39',
                  '미스 포츈':'40',
                  '미스포츈':'40',
                  '미포':'40',
                  '모데카이저':'41',
                  '모데':'41',
                  '모르가나':'42',
                  '몰가':'42',
                  '나서스':'43',
                  '니달리':'44',
                  '녹턴':'45',
                  '누누와 윌럼프':'46',
                  '누누':'46',
                  '올라프':'47',
                  '판테온':'48',
                  '뽀삐':'49',
                  '람머스':'50',
                  '레넥톤':'51',
                  '럼블':'52',
                  '라이즈':'53',
                  '샤코':'54',
                  '쉔':'55',
                  '신지드':'56',
                  '사이온':'57',
                  '시비르':'58',
                  '소나':'59',
                  '소라카':'60',
                  '스웨인':'61',
                  '타릭':'62',
                  '티모':'63',
                  '트리스타나':'64',
                  '트타':'64',
                  '트런들':'65',
                  '트린다미어':'66',
                  '트린':'66',
                  '트위스티드 페이트':'67',
                  '트페':'67',
                  '트위스티드페이트':'67',
                  '트위치':'68',
                  '우디르':'69',
                  '우르곳':'70',
                  '베인':'71',
                  '베이가':'72',
                  '블라디미르':'73',
                  '블라디':'73',
                  '워윅':'74',
                '신 짜오':'75',
                '신짜오':'75',
                '질리언':'76',
                '레오나':'77',
                '오리아나':'78',
                '탈론':'79',
                '오공':'80',
                '요릭':'81',
                '스카너':'82',
                '리븐':'83',
                '제라스':'84',
                '그레이브즈':'85',
                '쉬바나':'86',
                '피즈':'87',
                '볼리베어':'88',
                '아리':'89',
                '빅토르':'90',
                '세주아니':'91',
                '직스':'92',
                '노틸러스':'93',
                '피오라':'94',
                '룰루':'95',
                '헤카림':'96',
                '바루스':'97',
                '다리우스':'98',
                '드레이븐':'99',
                '제이스':'100',
                '자이라':'101',
                '다이애나':'102',
                '렝가':'103',
                '신드라':'104',
                '카직스':'105',
                '엘리스':'106',
                '제드':'107',
                '나미':'108',
                '바이':'109',
                '쓰레쉬':'110',
                '퀸':'111',
                '자크':'112',
                '리산드라':'113',
                '아트록스':'114',
                '루시안':'115',
                '징크스':'116',
                '야스오':'117',
                '벨코즈':'118',
                '브라움':'119',
                '나르':'120',
                '아지르':'121',
                '칼리스타':'122',
                '렉사이':'123',
                '바드':'124',
                '에코':'125',
                '탐 켄치':'126',
                '탐켄치':'126',
                '킨드레드':'127',
                '일라오이':'128',
                '진':'129',
                '아우렐리온 솔':'130',
                '아우렐리온솔':'130',
                '탈리야':'131',
                '클레드':'132',
                '아이번':'133',
                '카밀':'134',
                '라칸':'135',
                '자야':'136',
                '케인':'137',
                '오른':'138',
                '조이':'139',
                '카이사':'140',
                '파이크':'141',
                '니코':'142',
                '사일러스':'143',
                '유미':'144',
                '키아나':'145',
                '세나':'146',
                '아펠리오스':'147',
                '세트':'148',
                '릴리아':'149',
                '요네':'150',
                '사미라':'151',
                '세라핀':'152',
                '렐':'153'
                }
CounterChamp = []
CounterChampList = []
CounterChampList_F = []
test_url = "http://lol.inven.co.kr/dataninfo/counter/list.php?code=" + str(ChampNumberSet[champ])            #카운터 번호 (ex> 아칼리 = 1)
resp = requests.get(test_url)
html = BeautifulSoup(resp.content, 'html.parser')

rel = html.find('div', {'class': 'champList'})
CounterChamp = str(rel).split('selectCounter')
del CounterChamp[0]
del CounterChamp[0]
for i in range(0,len(CounterChamp)):
    if i % 2 == 0:
        champName = CounterChamp[i].replace('(\'\');">','')
        champName = champName.split('</a')[0]
        print(champName)
        CounterChampList_F.append(champName)
        print("========================================")
print(CounterChampList_F)

최종 크롤링 부분 코드입니다.

실행 결과입니다.

 

피오라 입력 결과입니다.

 

※여기 나오는 카운터는 모두 승률이나 패치를 감안하지 않고 인벤 글을 기준으로 찾은 것이기 때문에 부정확할 수 있습니다.

!robots.txt 확인결과

:Wget을 제외한 봇의 접근을 허용하고 있습니다.

lol.inven.co.kr/robots.txt여기서 확인 가능합니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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 31
글 보관함