
웹 스크래핑은 데이터를 분석하는 데 있어 매우 유용한 기술입니다.
특히 Pandas 라이브러리의 pd.read_html() 메소드를 사용하면, HTML 페이지에서 표 데이터를 손쉽게 가져올 수 있습니다. 이번 글에서는 다음의 내용을 다룹니다:
- pd.read_html()을 사용해 데이터를 가져오는 방법
- 라이브러리 설치 에러 해결 방법
- 가져온 데이터의 특성과 처리 방법
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 페이지에서 데이터를 손쉽게 가져올 수 있는 강력한 도구입니다. 설치 에러를 해결하고, 데이터의 특성을 이해하며, 필요한 데이터로 정리하는 과정을 거치면 웹 데이터를 활용한 분석 작업이 훨씬 쉬워집니다.
위 과정을 참고하여 다양한 웹 데이터를 탐구해 보세요! 🚀