본문 바로가기
Python

Python Pandas로 웹페이지의 표를 데이터프레임으로 가져오는 방법

by ssury94 2025. 1. 22.

웹 스크래핑은 데이터를 분석하는 데 있어 매우 유용한 기술입니다.

특히 Pandas 라이브러리의 pd.read_html() 메소드를 사용하면, HTML 페이지에서 표 데이터를 손쉽게 가져올 수 있습니다. 이번 글에서는 다음의 내용을 다룹니다:

  1. pd.read_html()을 사용해 데이터를 가져오는 방법
  2. 라이브러리 설치 에러 해결 방법
  3. 가져온 데이터의 특성과 처리 방법

1. HTML 페이지에서 표 데이터 가져오기

예를 들어, 캐나다 주택 가격 정보를 담고 있는 이 웹페이지에서 데이터를 가져와 보겠습니다:

import pandas as pd

# 웹페이지에서 표 데이터를 가져옵니다.
df_list = pd.read_html('https://www.livingin-canada.com/house-prices-canada.html')

# 가져온 데이터를 출력합니다.
for idx, df in enumerate(df_list):
    print(f"표 {idx + 1}:")
    print(df.head())
  • pd.read_html()은 리스트 형태로 여러 개의 데이터프레임을 반환합니다.
    🌟 왜 리스트로 반환할까요? 이는 웹페이지에 여러 개의 <table> 요소가 있을 수 있기 때문입니다.
  • 위 코드에서 df_list는 표 데이터를 담고 있는 리스트입니다. 각 표는 Pandas 데이터프레임으로 변환됩니다.

2. 라이브러리 설치 에러 해결 방법 ⚠️

만약 다음과 같은 에러가 발생한다면:

ImportError: lxml not found, please install it

이는 lxml 라이브러리가 설치되지 않았기 때문입니다. 아래 두 가지 방법으로 설치할 수 있습니다:

(1) 터미널에서 설치하기

아나콘다 환경이나 일반 Python 환경에서 다음 명령어를 실행합니다:

# Conda 환경
conda install lxml

# pip 사용
pip install lxml

(2) Jupyter Notebook에서 설치하기

Jupyter Notebook 셀에서 아래 코드를 실행하면 lxml을 설치할 수 있습니다:

! conda install -y lxml

3. 가져온 데이터의 특성과 처리 방법 🧹

가져온 데이터가 항상 깔끔한 상태는 아닙니다. 예를 들어, 아래와 같은 이슈가 있을 수 있습니다:

(1) 데이터 타입 확인하기

# 첫 번째 표를 선택합니다.
df = df_list[0]

# 데이터 타입 확인
df.info()

Average House Price 열이 object 타입으로 처리되는 경우, 이를 숫자 데이터로 변환해야 합니다:

# 열의 데이터를 숫자형으로 변환합니다.
df['Average House Price'] = df['Average House Price'].str.replace(',', '').astype(float)

(2) 여러 개의 표 처리하기

웹페이지에 표가 여러 개인 경우, 관심 있는 표를 선택해서 작업을 진행하면 됩니다:

# 두 번째 표를 선택
second_table = df_list[1]
print(second_table.head())

결론 ✨

Pandas의 pd.read_html()은 HTML 페이지에서 데이터를 손쉽게 가져올 수 있는 강력한 도구입니다. 설치 에러를 해결하고, 데이터의 특성을 이해하며, 필요한 데이터로 정리하는 과정을 거치면 웹 데이터를 활용한 분석 작업이 훨씬 쉬워집니다.

위 과정을 참고하여 다양한 웹 데이터를 탐구해 보세요! 🚀