일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 행정동표시
- soa시험
- 행정동시각화
- 맵지도
- 천안시 데이터 분석
- soa시험예약
- 이공계 대학원 연수 프로그램
- iris대학원
- 태블로맵지도시각화
- 대학원연수프로그램
- soa날짜
- rstudio이전버전 설치
- 민원데이터
- dependency modeling
- 맵지도시각화
- 태블로
- 한국캐나다대학원연수
- explicit random effect model
- 한-캐대학원
- soa자리선택
- soa환불
- random effect model
- 모수추정
- wishart-gamma
- 태블로맵
- 태블로에러
- rstudio 설치 오류
- 태블로행정동
- torch.nn.Linear
- rstudio 이전버전
- Today
- Total
수리통계 분석 코딩 실습
[크롤링] statiz 선수별 일자별 데이터 크롤링 본문
✔ kbo선수들 중 선수별 날짜별 정보 크롤링 방식을 알아보자!
[Process]
[크롤링 내용] - [방식] - [코드]
[1] 크롤링 내용
알고자 하는 선수의 날짜별 경기력 정보를 크롤링 하자. 크롤링 하고자 하는 정보는 아래의 테이블과 같다.
[2] 방식
statiz는 테이블로 이뤄진 html이어서, beautifulsoup을 이용해서 html parsing을 통해 테이블을 크롤링하고자 한다.
이때, url링크를 넣어 데이터를 접근해야하므로, url에 필요한 정보를 알아야하는데,
위의 사진과 같이 기재되어 있어, 선수 번호(p_no),포지션(pos),년도(year)를 넣어 크롤링하면 되겠다
2) 홈페이지 마크다운 분석
[F12]를 눌러 아래와 같이 사진처럼 작업자를 켜주고, 동그라미친 부분을 클릭해 크롤링하고자 하는 테이블을 가져온다.
[F12]를 누르고 앞선 동그라미를 클릭한채 홈페이지 이곳 저곳을 누르면 아래 사진처럼 보이는데,
테이블 위로 접근해 <div class = 'table_type02 ~~'>를 눌러 실제 테이블이 잘 클릭되어 있는지 파악한다.
이제 다 끝났다! 이 class를 이용해 beautifulsoup의 css path를 입력해 크롤링해오면 된다!
[3] 코드
from urllib.request import Request
from urllib.request import urlopen
from bs4 import BeautifulSoup
import urllib.request
import re
import numpy as np
import time
import os
import random
import time
import pandas as pd
앞서 url에 p_no, pos, year가 필요했으므로, 아래처럼 input값을 기재해준다.
이정후 타자의 데이터를 추출하기 위해 아래처럼 작성한다.
# 이정후
p_no = 12906
year = 2017
그럼 url에 p_no, year가 잘 들어가서 2017년 이정후 선수의 날짜별 경기력 데이터를 크롤링 해올 수 있다.
url = f'https://statiz.sporki.com/player/?m=day&p_no={p_no}&pos=batting&year={year}'
req = Request(url,headers={'User-Agent':'Mozila/5.0'})
webpage = urlopen(req)
soup = BeautifulSoup(webpage,'html.parser')
element = soup.find_all(class_ = 'table_type02 transverse_scroll')[0] # 테이블 접근
테이블 접근시 테이블 안의 모든 컬럼들이 다 'th'로 구분되어 있음 그러므로 'th'를 다 불러옴
headers = [th['tooltip'] for th in element.find_all('th')]
headers = headers[:32] # 32개만 header로 존재, # 데이터 프레임 컬럼 설정 즉, SS, OPS,...
데이터 값들은 tr안에 td에 있으므로 접근 후 크롤링
data = []
for row in element.find_all('tr'):
row_data = [td.text for td in row.find_all('td')]
if row_data:
data.append(row_data)
# 데이터프레임 생성
df = pd.DataFrame(data, columns=headers)
전체 코드
# 이정후
p_no = 12906
year = 2017
url = f'https://statiz.sporki.com/player/?m=day&p_no={p_no}&pos=batting&year={year}'
req = Request(url,headers={'User-Agent':'Mozila/5.0'})
webpage = urlopen(req)
soup = BeautifulSoup(webpage,'html.parser')
element = soup.find_all(class_ = 'table_type02 transverse_scroll')[0]
headers = [th['tooltip'] for th in element.find_all('th')]
headers = headers[:32] # 32개만 header로 존재,
data = []
for row in element.find_all('tr'):
row_data = [td.text for td in row.find_all('td')]
if row_data:
data.append(row_data)
# 데이터프레임 생성
df = pd.DataFrame(data, columns=headers)
'기타' 카테고리의 다른 글
코드 블럭 디자인 변경 (1) | 2023.10.18 |
---|