가이드라인

정적인 주가 데이터를 크롤링하는 방법

만약 주식 데이터가 정적인 형태로 제공된다면, 실습 화면의 예시와 같이 requestsBeautifulSoup 라이브러리만으로도 웹 크롤링을 진행할 수 있습니다.

이번 수업에서는 이 링크와 같은 가상 주식 데이터 표 내부의 데이터를 크롤링하는 방법을 알아보겠습니다.

회사명현재가전일대비등락률
회사 A1064262.44%
회사 B1458-35-2.40%
회사 C1991492.46%
회사 D2595220.85%
회사 E3074-36-1.17%
회사 F59820.33%

예시로 제시된 표의 데이터는 새로고침을 하지 않는 한 변하지 않는 정적인 데이터입니다.


코드 설명

앞서 배운 requests와 BeautifulSoup 라이브러리를 사용해 크롤링을 하는 과정은 비슷하지만, response.encoding = "utf-8"을 통해 한글 데이터를 정상적으로 가져올 수 있도록 설정해야 합니다.

또한 find("td", {"class": "company-cell"}), find_all("tr")와 같이 find 메서드 심화 사용법을 알아보겠습니다.

Step 1

웹 페이지 HTML 가져오기
response = requests.get(url) response.encoding = "utf-8" html_content = response.text
  • requests.get(url): 지정된 URL로부터 웹 페이지의 데이터를 요청하고 응답을 받습니다.
  • response.encoding = "utf-8": 응답의 인코딩을 UTF-8로 설정하여 한글 등의 문자가 깨지지 않도록 합니다.
  • html_content = response.text: 응답으로 받은 HTML 컨텐츠를 텍스트로 저장합니다.

Step 2

HTML 파싱
soup = BeautifulSoup(html_content, "html.parser")
  • BeautifulSoup 객체를 생성하여 HTML 컨텐츠를 파싱합니다. 이로써 HTML 요소에 쉽게 접근할 수 있게 됩니다.

Step 3

stock_table = soup.find("table", {"id": "stock-table"})
  • soup.find() 메서드를 사용해 HTML에서 주식 데이터가 담긴 테이블 요소(<table id="stock-table">)를 찾습니다.

Step 4

테이블 내 데이터 추출
for row in stock_table.find("tbody").find_all("tr"):
  • stock_table.find("tbody").find_all("tr"): 테이블의 <tbody> 섹션 내 모든 행(<tr>)을 순회합니다.

각 행에서 다음 데이터를 추출합니다:

  • 회사 이름: class="company-cell" 클래스를 가진 <td> 요소의 텍스트입니다.
  • 현재 가격: class="current-price-cell" 클래스를 가진 <td> 요소의 텍스트입니다.
  • 전일 대비 가격 변동: class="diff-cell" 클래스를 가진 <td> 요소의 텍스트입니다.
  • 등락률: class="fluct-cell" 클래스를 가진 <td> 요소의 텍스트입니다.

Step 5

출력
print(f"{company_name}: 현재가 {current_price}, 전일대비 {price_change}, 등락률 {change_percentage}")
  • 추출한 데이터를 포맷에 맞추어 출력합니다.

실습

화면 오른쪽 코드 실행 버튼을 누르고, 크롤링 결과를 확인하거나 코드를 수정해 보세요!

가이드라인

AI 튜터

배포

디자인

업로드

수업 노트

즐겨찾기

도움말

코드 에디터

코드 실행
코드 생성

실행 결과