본문 바로가기
PROJECT/LOST ARK Web Crawling Project

[ LOST ARK Web Crawling Project ] 내 캐릭터 각인 및 정보 확인하기

by 2CHAE._.EUN 2022. 3. 3.
동적 크롤링을 사용

로아와(https://loawa.com/) 사이트의 검색 HTML 요소에 내 캐릭터의 이름인 데이터를 전송해준다.
내 캐릭터 데이터 창에서 나의 정보와 내가 사용하고 있는 각인 등을 출력해준다.

추가적인 요소로 내 캐릭터가 사용하고 있는 각인과 다른 유저들이 많이 사용하고 있는 각인을 
비교할 수 있다. 

 

from selenium import webdriver
import time

driver = webdriver.Chrome('./chromedriver')

URL = 'https://loawa.com/'
driver.get(URL) # get 함수를 사용해서 웹 사이트의 내용 받아오기

time.sleep(2)

my_character = input("검색하고자 하는 캐릭터명 입력 : ")

search_box = driver.find_element_by_css_selector("input.form-control")

search_box.send_keys(my_character)

button = driver.find_element_by_css_selector("button.search-submit")

button.click()
time.sleep(2)

print("\n<<< 캐릭터 이름 >>>\n")
character_name = driver.find_element_by_css_selector("h2.char-title")
print("\t" + character_name.text)
print("\n")

print("\n<<< 캐릭터 정보 >>>\n")
server_name = "//*[@id=\"char-app\"]/div/div[2]/div[1]/div[1]/dl[1]/dd"
my_server = driver.find_element_by_xpath(server_name)
print("\n서버 : " + my_server.text )

job_class = "//*[@id=\"char-app\"]/div/div[2]/div[1]/div[1]/dl[3]/dd"
my_class = driver.find_element_by_xpath(job_class)
print("\n클래스 : " + my_class.text)

item_level = "//*[@id=\"char-app\"]/div/div[2]/div[1]/div[1]/dl[6]/dd"
my_level = driver.find_element_by_xpath(item_level)
print("\n아이템 레벨 : " + my_level.text)

power = "//*[@id=\"abasic-tab\"]/div/div[1]/div/div[2]/div[1]/span/span[2]"
my_power = driver.find_element_by_xpath(power)
print("\n공격력 : " + my_power.text)

print("\n")
print("\n<<< 각인 효과 >>>\n")
using_carving = driver.find_elements_by_css_selector("div.engrave-item")

for index in using_carving:
    print(index.text)

driver.close() # 실행시킨 driver 종료

 

 


[ 코드 설명 ]

 

 

웹 페이지를 불러와 찾고 싶은 캐릭터 명 입력하기

 

from selenium import webdriver
import time

driver = webdriver.Chrome('./chromedriver')

URL = 'https://loawa.com/'
driver.get(URL) # get 함수를 사용해서 웹 사이트의 내용 받아오기

time.sleep(2)

my_character = input("검색하고자 하는 캐릭터명 입력 : ")

search_box = driver.find_element_by_css_selector("input.form-control")

search_box.send_keys(my_character)

button = driver.find_element_by_css_selector("button.search-submit")

button.click()
time.sleep(2)

 

유저 명을 검색해서 그 유저에 대한 데이터를 추출해야 하므로 동적 크롤링을 해야한다.

 

동적 크롤링을 사용하기 위해서는 selenium 라이브러리를 사용해야 한다.

selenium은 웹 드라이버를 사용해서 자동화를 실현하는 라이브러리이므로 크롬 버전에 맞는

chromedriver를 다운받아 chromedriver.exe를 selenium에 연결해서 웹 페이지를 조작해야한다.

* chromedriver.exe는 파이썬 코드 파일과 같은 폴더에 위치해야한다. 

 

selenium도 get 함수를 이용해서 웹 페이지의 내용을 얻어올 수 있다.

 

find_element_by_css_selector 함수는 인자로 태그와 선택자의 조합을 받아 해당 HTML 요소를 리턴해준다.

* 태그가 class로 지정된 경우에는 뒤에 '.'을 붙이고 id일 경우에는 뒤에 '#'을 붙여야한다.  

 

send_keys 함수는 HTML 요소에 데이터를 전송하는 함수이다.  HTML 요소에 메소드를 사용하고 인자로

전송할 값인 검색할 캐릭터 이름을 전달해준다. 

 

click 함수는 HTML 요소를 클릭해준다.

 

search_box는 캐릭터의 이름을 입력하는 HTML 요소이고 button은 그 요소를 검색해주는 버튼 HTML 요소이다.

 

동적 크롤링에서 사용하는 selenium은 페이지를 직접 이동해서 조작하기 때문에 지연시간을 주는 것이 중요하다.

time의 sleep 함수를 사용해서 지연 시간을 줄 수 있다. 인자는 초단위이다.

 

 

 

캐릭터 이름, 정보, 각인 정보 등 불러오기

 

print("\n<<< 캐릭터 이름 >>>\n")
character_name = driver.find_element_by_css_selector("h2.char-title")
print("\t" + character_name.text)
print("\n")

print("\n<<< 캐릭터 정보 >>>\n")
server_name = "//*[@id=\"char-app\"]/div/div[2]/div[1]/div[1]/dl[1]/dd"
my_server = driver.find_element_by_xpath(server_name)
print("\n서버 : " + my_server.text )

job_class = "//*[@id=\"char-app\"]/div/div[2]/div[1]/div[1]/dl[3]/dd"
my_class = driver.find_element_by_xpath(job_class)
print("\n클래스 : " + my_class.text)

item_level = "//*[@id=\"char-app\"]/div/div[2]/div[1]/div[1]/dl[6]/dd"
my_level = driver.find_element_by_xpath(item_level)
print("\n아이템 레벨 : " + my_level.text)

power = "//*[@id=\"abasic-tab\"]/div/div[1]/div/div[2]/div[1]/span/span[2]"
my_power = driver.find_element_by_xpath(power)
print("\n공격력 : " + my_power.text)

print("\n")
print("\n<<< 각인 효과 >>>\n")
using_carving = driver.find_elements_by_css_selector("div.engrave-item")

for index in using_carving:
    print(index.text)

driver.close() # 실행시킨 driver 종료

 

캐릭터 정보를 얻어오는 HTML 경로로는 XPath를 사용한다. ( dd에 별다른 class나 id가 없기 때문 )

 

XPath는 웹 페이지의 구조 최상단부터 태그를 타고 들어가서 해당 HTML 요소가 어디에 존재하는지를

나타내는 경로의 일종이다. 

 

이름, 정보, 각인에 각각 해당하는 내용을 받아오기 위해서는 태그에 text를 사용해야한다.

 

 

실행시 DeprecationWarning에 대한 문구 지우기

 

결과값을 깨끗하게 출력하기 위해 해당 코드 사용

 

import warnings
warnings.filterwarnings('ignore')

 

 

 

결과 출력