Networks/Project

SK networks AI Camp - 야구 데이터 분석하기(2) feat. Lotte giants

코딩하는 Español되기 2024. 8. 5. 19:00

2024.07.31 - [Networks/Project] - SK networks AI Camp - 야구 데이터 분석해보기(1) feat. Lotte giants

 

SK networks AI Camp - 야구 데이터 분석해보기(1) feat. Lotte giants

24년 7월 8일부터 진행중인 SK networks AI Camp에서 많은 것들을 배웠습니다.[7월 ~ 8월 배운 내용]Python, Database(Docker, DBeaver), Crawling(BeautifulSoup,Selenium), 리눅스 명령어, 화면구현 아무래도 짧은 시간동

joowon582.tistory.com

 

이번에는 2020 ~ 2024년 데이터를 불러오도록 해보았습니다.

이전 데이터는 2024년의 선수데이터만 불러왔다면 연도를 전부 받아와야 하기에 딕셔너리 형태로 받고

for문으로 클릭을 통해 이동해 주었습니다.

 

[Import]

import pandas as pd
import time 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver import Keys, ActionChains
import pyperclip
from sqlalchemy import create_engine
import re
# json 모듈 로드
import json

 

[크롤링]

driver = webdriver.Chrome()
url = "https://www.giantsclub.com/html/?pcode=288"
driver.get(url)
# 창 크기 최대로
driver.maximize_window()
driver.implicitly_wait

hitter_data, pitcher_data = {}, {}
res = {}

 

○ def choose_year( )

   2020년은 XPATH ( //*[@id="year"]/option[{ }] ) { } 안에 부분이 5이고

   2024년은 XPATH가 ( //*[@id="year"]/option[{ }] ) 의 { }안에 부분이 1이어서 format을 주고 값을 넣었습니다.

○ def choose_page(p_p_i)

    각 연도에서 i를 더하면 2025가 나왔습니다. 

    * i = 페이지 번호(choose_year의 i)

    그래서 cal_year 변수에 2025 - p_p_i를 적어서 딕셔너리에 각 년도가 입력되게 했습니다.

    ● 페이지 이동을 하는데 처음으로 돌아가는 것을 적지않아서 2,3 페이지만 반복되었습니다.

       그래서 2, 3 페이지를 돌고 다시 1페이지로 돌아가도록 했습니다.

driver.find_element(By.XPATH, value='//*[@id="div_data"]/div[2]/a[1]').click()
# 크롤링 함수

# 연 선택 클릭
def choose_year():
    for i in range(5,0,-1):
        # 2020 ~ 2024년 (5 ~ 1)
        driver.find_element(By.XPATH, value='//*[@id="year"]/option[{}]'.format(i)).click()
        time.sleep(0.5)
        click_enter_block(i)
    # return res

# 조회 버튼 클릭(통일)
def click_enter_block(p_i):
    enter_block = f'//*[@id="cont_wrapper"]/div[2]/div[1]/div/form/input[4]'
    driver.find_element(By.XPATH, value=enter_block)
    driver.implicitly_wait(5)
    time.sleep(0.5)
    choose_page(p_i)

# 1, 2, 3 페이지 이동
def choose_page(p_p_i):
    cal_year = 2025 - p_p_i

    for i in range(3):
        time.sleep(0.5)
        if i == 1:
            driver.find_element(By.XPATH, value='//*[@id="div_data"]/div[2]/a[2]').click()
            time.sleep(0.5)
        elif i == 2:
            driver.find_element(By.XPATH, value='//*[@id="div_data"]/div[2]/a[3]').click()
            time.sleep(0.5)
        res[str(cal_year) + '_' + str(i+1)] = driver.find_element(By.XPATH, '//*[@id="tbl-rank"]').text.split('\n')
    # 다시 1페이지로    
    driver.find_element(By.XPATH, value='//*[@id="div_data"]/div[2]/a[1]').click()
    time.sleep(0.5)
choose_year()
hitter_data = res

# 투수 데이터로 이동
res = {}
driver.get('https://www.giantsclub.com/html/?pcode=289')
driver.implicitly_wait(5)
time.sleep(1.5)

choose_year()
pitcher_data = res

# 저장될때까지 기다렸다가 창 자동 종료
time.sleep(2)
driver.close()

아래와 같은 형태로 받아와졌습니다.

년도_'페이지' : [내용]

이 후 전처리가 완전히 끝난 후 이어서 포스팅하겠습니다.