꾸준히 성장하기

[D+27] 교육 | 데이터 크롤링의 기본과 접근 방법(정적 페이지 크롤링) 본문

KT 에이블스쿨 5기/교육

[D+27] 교육 | 데이터 크롤링의 기본과 접근 방법(정적 페이지 크롤링)

data.dohii 2024. 3. 18. 23:17

안녕하세요, 여러분! 오늘은 데이터 크롤링에 대해 이야기해보려고 합니다. 

데이터 크롤링은 웹에서 유용한 정보를 자동으로 추출하는 과정입니다. 

이 과정은 데이터 분석가나 개발자들에게 필수적인 기술 중 하나로, 웹상의 정보를 효율적으로 수집하고 활용할 수 있게 해줍니다.


1. 웹페이지의 종류

1) 정적인 페이지

웹 브라우저에 화면이 한 번 로드되면, 이벤트에 의한 화면의 변경 없이 그대로 유지되는 페이지입니다. 예를 들어, 기사나 블로그 포스트 페이지가 이에 해당합니다.

2) 동적인 페이지

웹 브라우저에 화면이 로드된 후, 사용자의 상호작용(예: 버튼 클릭, 스크롤 등)에 따라 서버에서 데이터를 가져와 화면을 변경하는 페이지입니다. 쇼핑몰의 상품 목록이나 소셜 미디어 피드가 대표적인 예입니다.

 

2. 웹페이지의 종류

1) JSON 문자열로 받아 파싱하는 방법

이 방식은 주로 동적 페이지에서 사용되며, 서버로부터 JSON 형태의 문자열을 받아 이를 파이썬의 리스트나 딕셔너리로 변환하여 사용합니다.

2) HTML 문자열로 받아 파싱하는 방법

이 방식은 주로 정적 페이지에서 사용되며, HTML 형태의 문자열을 받아 필요한 데이터만 추출합니다.

 

3. 웹페이지의 종류

정적 페이지를 크롤링하는 기본적인 순서는 다음과 같습니다.

1) 웹서비스 분석: 우선, 데이터를 추출하고자 하는 웹페이지의 URL을 분석합니다.

page, page_size = 1, 60

url = f'https://m.stock.naver.com/api/index/KOSPI/price?pageSize={page_size}&page={page}'

print(url)


2) 서버에 데이터 요청:
분석한 URL로 서버에 데이터를 요청합니다. 

response = requests.get(url)

response


3) 서버에서 받은 데이터 파싱: 서
버로부터 받은 데이터(보통 HTML 형태의 문자열)를 파싱하여 필요한 정보만 추출합니다. 이 과정에서 추출한 데이터는 파이썬의 리스트나 딕셔너리 형태로 변환되고, 이를 바탕으로 판다스의 DataFrame으로 만들 수 있습니다.

columns = ["localTradedAt", "closePrice"]

data = response.json

kospi_df = pd.DataFrame(data)[columns]

kospi_df.tail(2)

 

위 과정, 함수로 만들기: 반복적인 작업을 효율적으로 처리하기 위해, 위의 과정을 함수로 정의합니다. 이렇게 하면 다양한 웹페이지에 대해 유연하게 데이터를 추출할 수 있습니다.

def stock_price(code='KOSPI', page_size=60, page=1):

# 1. URL

url = f'https://m.stock.naver.com/api/index/{code}/price?pageSize={page_size}&page={page}'

# 2. request(url) > response: json(str)

response = requests.get(url)

# 3. json(str) > list, dict > DataFrame

return pd.DataFrame(response.json())[["localTradedAt", "closePrice"]]

 

df = stock_price(code = 'KOSDAQ' )

pd.tail(2)


이렇게 정적 페이지에서 데이터 크롤링의 기본적인 개념과 접근 방법을 알아보았습니다.

다음 시간에는 동적 페이지에서 데이터를 크롤링하는 실습을 진행해보겠습니다.

여러분의 데이터 분석 여정에 이번 포스팅이 도움이 되길 바랍니다. 

반응형