본문 바로가기

파이썬으로 퀀트 프로그램 만들기 project/웹 크롤링

웹 크롤링 실습_6 - POST

728x90

웹 크롤링 방식 중 POST 방식으로 실습을 진행해보겠습니다.

예시 웹 사이트로 한국거래소 상장공시시스템에 접속해주세요.

그리고 [오늘의 공시 -> 전체 -> 더보기]를 선택하면 전체 공시내요을 확인할 수 있습니다. (링크)

여기서 다른 날짜를 검색해도 페이지는 바뀌지만 URL은 바뀌지 않는 것을 확인할 수 있습니다.

POST방식인 것을 확인할 수 있습니다. 

개발자도구 화면을 열고 [Network] 클릭 후, 오늘의 공시에 날짜를 클릭하면 todaydisclosure.do

를 확인할 수 있습니다.

 

이미지_1

todaydisclosure.do를 통해 데이터를 요청하는 것입니다. 그것을 클릭하여 [Headers]를 보시면 Request URL이 우리가 요청하는 주소이고, Request method가 POST방식임을 확인할 수 있습니다.

 

이미지_2

 

그리고 [Payload] 에서 [Form Data]를 틍호 서버에 데이터를 요청하는 내역을 확인할 수 있습니다.

여기서 selDate 부분이 우리가 선택한 날짜에 해당합니다.

 

이미지_3

 

위와 같은 정보들을 이용하여 POST 방식으로 크롤링 해보겠습니다.

 

import requests as rq
from bs4 import BeautifulSoup
import pandas as pd

#Headers 부분에 Request URL
url = 'https://kind.krx.co.kr/disclosure/todaydisclosure.do'

#값이 없는 항목은 입력 안해도 된다.
payload = {
    'method': 'searchTodayDisclosureSub',
    'currentPageSize': '15',
    'pageIndex': '1',
    'orderMode': '0',
    'orderStat': 'D',
    'forward': 'todaydisclosure_sub', 
    'chose': 'S',
    'todayFlag': 'N',
    'selDate': '2023-08-30'
}

data = rq.post(url, data = payload)
html = BeautifulSoup(data.content)
print(html)

 

결과를 보면 예상보다 복잡한 결과가 출력됩니다. 이것은 엑셀 데이터가 HTML 형태로 나와있기 때문입니다.

이것을 변형하여 데이터프레임 형태로 불러오도록 하겠습니다.

 

#BeautifulSoup 에서 파싱한 파서트리를 prettify()함수를 통해
#다시 유니코드 형태로 돌려줍니다.
html_unicode = html.prettify()

tbl = pd.read_html(html_unicode)
print(tbl)

 

테이블은 pandas를 통해 쉽게 불러올 수 있습니다.