KARIU의 IT 블로그

Python - 표 데이터 쉽게 크롤링하기 본문

프로그래밍 언어/Python Crawling

Python - 표 데이터 쉽게 크롤링하기

카리우 2021. 5. 27. 23:28
반응형

 파이썬으로 서울 지하철 데이터를 크롤링하다가 발견한 쉽고 간편한 방법이 있어서 소개합니다.

 

출처 : 위키백과

 

 바로 위와 같이 모든 행들이 따로따로 분리 되어 있는 것이 아니라 노선의 "서울 지하철 4호선" 처럼 모든 행들이 하나로 합쳐져 있는 것도 있고 소재지의 "노원구" , "도봉구", "강북구" 등과 같이 임의적으로 쪼개져 행들이 합쳐져 있는 복잡한 표를 깔끔하게 가져오는 방법입니다.

 

html_parser_table의 make2d를 이용하시면 깔끔하게 정보를 가져오실 수 있습니다.

 

1. 설치

html_parser_table의 make2d를 사용하기에 앞서 먼저 설치를 해줘야합니다.

 

 

 위와 같은 명령을 터미널 창에 입력하여 html_parser_table을 설치합니다.

 

 

2. requests 요청과 해당 데이터가 있는 부분 추출하기

 

 그런 다음, requests 라이브러리와 beautifulSoup 라이브러리를 이용하여 해당 표가 있는 부분의 코드를 파싱합니다.

 

 

 크롬 개발자 도구를 열어 역 정보가 담겨 있는 표를 클릭해보면 어느 부분에 있는지 알 수 있습니다.

 

 위의 표는 <table> 태그의 클래스가 "wikitable"인 곳에 들어있네요.

 

 

 위와 같이 해당 url을 requests 라이브러리를 사용하여 get 요청을 보낸 뒤 beautifulSoup 라이브러리를 이용하여 해당 데이터의 html코드를 파싱하여 프린트 시켜주면 아래와 같은 결과를 얻습니다.

 

 

 잘 가져왔군요.

 

 

3. make2d를 사용하여 깔끔하게 모든 데이터 가져오기

 

 마지막으로 html_parser_table의 make2d를 이용하여 rowspan 또는 colspan으로 묶여져 있는 테이블을 한 행마다 가져올 수 있습니다.

 

 

 4번째 줄과 11 ~ 14 번째 줄이 추가되었습니다.

 

 pandas를 사용한 이유는 가져 온 데이터를 표 형식으로 쉽게 보기 위함입니다.

 

 10번째 줄에서 data 변수에 데이터가 담겨 있는 html 코드들이 저장 되어 있습니다.

 11번째 줄에서 parser_functions.make2d() 함수를 이용하여 table 변수에 data를 저장합니다.

 

 그리고 pandas의 DataFrame을 이용해 데이터를 출력해봅시다.

 

 

 rowspan으로 합쳐져 있던 행들도 하나하나 들어간 것을 확인할 수 있습니다!

 

 

 +) 실은 제가 저 표를 크롤링 할 때 make2d를 몰라서 if문 써가면서 하나하나 예외처리 해줬는데 이러한 좋은 기능을 가진 함수가 있는 것을 깨닫고 현타가 왔습니다...

 

 

 

반응형
Comments