본문 바로가기
파이썬/데이터 수집

[241002] 데이터 수집 #2 Web Crawling

by 황오독 2024. 10. 2.

1. 동적페이지와 정적페이지

동적페이지 (메모지) - 필요시 해당 페이지에 메모를 붙임. 정적페이지 (종이책) - 항상 같은 페이지.
웹 브라우저에 화면이 뜨고 이벤트가 발생하면 서버에서 데이터를 가져와 화면을 변경하는 페이지
- JSON(요리의 재료)
: 클라이언트와 서버 간의 데이터 전송을 위해 사용 (데이터만 전송하여 클라이언트에 화면을 업데이트)
웹 브라우저에 화면이 뜨면 이벤트에 의한 화면 변경이 없는 페이지
- HTML(요리의 완성된 모양)
: 웹페이지의 내용이 담긴 코드 (구조, 텍스트, 이미지 등을 담고 있음)

 

2. Crawling Naver Stock Datas (네이버 증권 사이트 주가 데이터 수집

더보기

- 수집할 데이터 : 일별 kospi, kosdaq 주가, 일별 환율(exchange rate) 데이터
- 데이터 수집 절차
    - 웹서비스 분석 : url
    - 서버에 데이터 요청 : request(url) > response : json(str)
    - 서버에서 받은 데이터 파싱(데이터 형태를 변경) : json(str) > list, dict > DataFrame

 

import requests
import pandas as pd

 

 1) 웹서비스 분석: url 

    - pc 웹페이지가 복잡하면 mobile 웹페이지에서 수집

url = 'https://m.stock.naver.com/api/index/KOSPI/price?pageSize=10&page=2'

 

 2) 서버에 데이터 요청 : request(url) > response : json(str)

   - status의 코드를 확인

response = requests.get(url)
response

# <Response [200]>

 

 3) 서버에서 받은 데이터 파싱 (데이터 형태를 변경)

data = response.json()
data[:2] # 리스트 내 하나의 딕셔너리는 row 값, 왼쪽 이름은 columns 명
df = pd.DataFrame(data)[['localTradedAt', 'closePrice']]
df.tail(2)

 

 4) 함수로 만들기

def stock(code='KOSPI', page_size=10, page=1):
    # 1. URL
    if page_size > 60:
        return 'pagesize less then 60!'
    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']]

 

'파이썬 > 데이터 수집' 카테고리의 다른 글

[241002] 데이터 수집 - Python (Class)  (2) 2024.10.02
[241002] 데이터 수집 #1 Web  (2) 2024.10.02