본문 바로가기

[Pandas] pd.read_html() :: html에서 표 가져오기/데이터프레임으로 만들기

Python/Pandas 2020. 3. 31.

반응형

⭐️ Colab에서 실행해보기

https://colab.research.google.com/drive/1qoZmWeqZV8c_-yOG2bKLMe3aDZJ2O0ia

 

 

pandas

import pandas as pd

 

pd.read_html을 이용하면 html에 있는 table속성에 해당하는 값을 가져올 수 있다.
이는 웹페이지에 있는 표를 불러오겠다는 의미이다.

 

 

pandas.read_html(URL, match='.+', flavor=None, header=None, index_col=None, skiprows=None, attrs=None, parse_dates=False, tupleize_cols=None, thousands=', ', encoding=None, decimal='.', converters=None, na_values=None, keep_default_na=True, displayed_only=True)

 

• URL : 대상 url 입력

• match : str or compiled regular expression, optional

   : 정규표현식 또는 문자열을 이용해서 전체 테이블을 가져오지말고 원하는 내용이 들어있는 테이블만 가져오게 함.

• flavor = None / ‘bs4’ / ‘html5lib’

   : html을 parsing할 engine 선택. None일 경우 'lxml'으로 시도된 후, 실패하면 bs4 + html5lib으로 수행된다.

• header = int or list-like or None, optional

   : header로(열 이름) 쓸 행을 지정할 수 있다.

• encoding = str or None, optional

   : 인코딩 설정. 한글이 깨져서 나올 때 encoding = 'utf-8'으로 설정하면 된다.

 


예제 URL : https://mizykk.tistory.com/39
예제 페이지에는 3개의 표가 있다.

 

 

1. html에서 표가져오기

table = pd.read_html('https://mizykk.tistory.com/39', header=0, encoding='utf-8')
table

→ [데이터프레임(표1), 데이터프레임(표2), 데이터프레임(표3)]

 

pd.read_html()을 사용하면 리스트 안에 데이터프레임이 들어있는 형태로 html에 있는 모든 table을 한번에 가져온다. 따라서 인덱스를 이용하여 원하는 표를 개별 데이터프레임으로 지정해주면 된다.  

 

table[1]

 

 

2. match : 원하는 내용이 들어있는 표만 가져오기

: 정규표현식 또는 문자열을 이용해서 원하는 내용이 들어있는 테이블만 가져오게 함.

table2 = pd.read_html('https://mizykk.tistory.com/39', match = '국가', header=0, encoding='utf-8')
table2

match = '국가'를 지정하여 국가가 포함된 테이블만 불러오도록 하였다. 해당 페이지에는 테이블이 3개지만 '국가'가 포함된 테이블은 하나라 하나의 표만 불러와졌다. 

 

html에서 하나의 표만 불러왔더라도 리스트안에 데이터프레임이 들어있는 형태로 나타난다. 따라서 table을 데이터프레임으로 활용하려면 무조건 인덱스로 불러주어야한다. 

 

table2[0]

 

 

 

reference

728x90

Comments