사전과제 - 강의를 다 들었다.
시간도 조금 남고, 교육에 들어가기 전에 배운 것을 바탕으로 프로젝트를 하고자 한다.
미니 토이 프로젝트 주제로 만들고 싶었던 것이 있어 그걸로 했다.
얼마 전까지 즐겼던 게임 로스트아크를 할적에,
데이터를 입력하면 그 데이터를 갈무리 하는 함수를 정리해놓은 엑셀을 만들었고, 많이 애용했었다.
이제 이 엑셀을 홈페이지를 만들어, 크롤링 까지 해와서 훨씬 간편하게 사용할 수 있는 홈페이지를 만드려고 한다.
기능:
1) 거래소 가격 정보 크롤링
2) 유저들의 영지 정보 DB 저장 및 간편한 불러오기
3) 데이터의 갈무리를 통한 수익 차트화
기능적으로 가장 걱정되는 크롤링을 먼저 해보았다.
일단 배운 것을 활용하고자, 배웠던 BeautifulSoup을 사용해 보았다.
일단, 결론부터 이야기하면 실패했다. ㅠㅠ
실패 사유는 공식적으로 공개되어 있는 거래소 사이트가 반응형이기 때문에, 정보가 처음부터 노출되어 있는 것이 아니기에 안된다고 한다.
정말 최근이다. 로스트아크에서 오픈 API를 공개했다. 이것으로 여러가지 작업이 간편해지고, 시간이 축소 되었다고 들었다. 나도 한번 써보자.
시간을 정말 많이 썼다. 하지만 실패했다.
오픈 API 뜯어보는 것을 유튜브도 보고 구글링도 하고 많이 시도 해보았지만, 결국 성과는 없었다. ㅠㅠ
API 뜯어보는데 시간을 거하게 말아먹고, 다른 방법을 찾아보기 시작했다.
그러다가 Selenium을 찾았다. Selenium에 대해 설명해 보자면,
매크로(자동화) 라이브러리 라고 말할 수 있을 것 같다.
BeautifulSoup에서 실패한 이유였던, 정보 노출까지 도달하지 못했던 문제를 해결할 수 있었다. 못할 것이 없다!
공식 사이트를 Selenium을 통해 키면,
최근에 로그인을 했어도 로그인 페이지로 가게 된다.
해결 방안1:
크롤링 사이트를 크롤링 한다.
해결 방안2:
아이디 비번을 코드에 집어 넣는다.
결론적으로, 해결방안2로 가게 되었다.
지금은 게임을 안하고 있기 때문에, 비밀번호를 다른 걸로 바꿔도 상관 없었다.
원하는 정보만 선택적으로 모아놓고 싶었기 때문이라는 점이 가장 컸다.
그리고 해결 방안1의 경우, 사이트에서 매크로 방지 페이지를 만들어 놓았기 때문에 이게 오히려 방해 되는 느낌도 있었다.
그리고 크롤링 사이트를 크롤링 하는 것은 모양 빠진다.
어쨌든 그렇게 크롤링에 성공 할 수 있었다.
크롤링이 생각보다 힘들었고, 시간이 예상보다 훨씬 많이갔다.
아래는 그 코드다.
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By id = "아이디" pwd = "1q2w3e4r!" driver = webdriver.Chrome() driver.get("https://lostark.game.onstove.com/Market") time.sleep(2) elem = driver.find_element(By.XPATH, '//*[@id="user_id"]') elem.send_keys(id) elem = driver.find_element(By.XPATH, '//*[@id="user_pwd"]') elem.send_keys(pwd) elem.send_keys(Keys.RETURN) time.sleep(2) elem = driver.find_element(By.XPATH, '//*[@id="lostark-wrapper"]/div/main/div/div[2]/a[2]').click() time.sleep(2) elem = driver.find_element(By.XPATH, '// *[ @ id = "itemList"] / thead / tr / th[1] / a').click() time.sleep(2)