🗄️ 데이터센터
home
주식거래 데이터
home

read_html

Pandas read_html 소개

pandas의 read_html 함수는 HTML 페이지에서 테이블 데이터를 추출하여 DataFrame으로 변환하는 강력한 도구입니다. 웹 스크래핑을 할 때 매우 유용하며, 특히 <table> 태그로 구성된 데이터를 쉽게 가져올 수 있습니다.
read_html 함수는 웹 페이지에서 모든 <table> 태그를 찾아 각각을 DataFrame으로 변환한 후, 이들을 리스트에 담아 반환합니다. 예를 들어, 웹 페이지에 3개의 테이블이 있다면 tables = pd.read_html(url)의 결과로 3개의 DataFrame이 포함된 리스트가 반환됩니다.
원하는 테이블을 선택하려면 리스트의 인덱스를 사용하면 됩니다. tables[0]은 첫 번째 테이블, tables[1]은 두 번째 테이블을 의미합니다. 이러한 방식으로 여러 테이블을 한 번에 가져와서 처리할 수 있습니다.

기본 사용법

import pandas as pd # 웹페이지에서 테이블 가져오기 url = "https://example.com" tables = pd.read_html(url) # tables는 DataFrame들의 리스트 형태로 반환됨 df = tables[0] # 첫 번째 테이블 선택
Python
복사

주요 매개변수

io: URL 또는 HTML 문자열
match: 특정 문자열이 포함된 테이블만 선택
header: 헤더로 사용할 행 지정
index_col: 인덱스로 사용할 열 지정
encoding: HTML 문서의 인코딩 방식 지정
import pandas as pd # 특정 문자열이 포함된 테이블만 가져오기 tables = pd.read_html(url, match='주가정보') # 헤더 지정하여 가져오기 tables = pd.read_html(url, header=0) # 인코딩 지정 tables = pd.read_html(url, encoding='utf-8')
Python
복사
match 매개변수는 테이블 내용을 기반으로 특정 테이블을 선택적으로 가져올 수 있게 해줍니다. 예를 들어, DataFrame 내부에 '주가' 또는 '시세'라는 텍스트가 포함된 테이블만 선택하고 싶다면 다음과 같이 작성할 수 있습니다
# '주가' 또는 '시세'가 포함된 테이블만 가져오기 tables = pd.read_html(url, match='주가|시세') # 여러 조건을 동시에 적용할 때는 | 기호 사용 tables = pd.read_html(url, match='삼성전자|SK하이닉스|LG전자')
Python
복사
match 매개변수는 정규표현식도 지원하므로, 더 복잡한 패턴 매칭도 가능합니다. 예를 들어 '2023'로 시작하는 데이터가 포함된 테이블만 선택하려면:
# 정규표현식을 사용한 매칭 tables = pd.read_html(url, match='^2023')
Python
복사

주의사항

웹사이트의 robots.txt를 확인하고 웹 스크래핑 정책을 준수해야 합니다.
동적으로 생성되는 테이블은 가져올 수 없을 수 있습니다.
일부 웹사이트는 접근을 차단할 수 있으므로 적절한 헤더 설정이 필요할 수 있습니다.

실습 예제

다음은 위키피디아의 대한민국 프로야구 팀 순위표를 가져오는 실제 실행 가능한 예제입니다:
import pandas as pd # 위키피디아 KBO 리그 페이지 url = "https://ko.wikipedia.org/wiki/KBO_%EB%A6%AC%EA%B7%B8" # 모든 테이블 가져오기 tables = pd.read_html(url) # '순위' 문자열이 포함된 테이블 찾기 kbo_tables = pd.read_html(url, match='순위') # 첫 번째 순위표 출력 print(kbo_tables[0])
Python
복사

Google Colab으로 실습하기