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()
아래와 같은 형태로 받아와졌습니다.
년도_'페이지' : [내용]
이 후 전처리가 완전히 끝난 후 이어서 포스팅하겠습니다.
'Networks > Project' 카테고리의 다른 글
SK networks AI Camp - Toy Project 크롤링 코드 리뷰 (4) | 2024.08.10 |
---|---|
SK networks AI Camp - Toy Project(에자일_1) (0) | 2024.08.10 |
SK networks AI Camp - Toy Project (0) | 2024.08.02 |
SK networks AI Camp - 야구 데이터 분석해보기(1) feat. Lotte giants (0) | 2024.07.31 |
SK networks AI Camp - mini project(2) (0) | 2024.07.26 |