본문 바로가기
IT & 개발공부/파이썬(Python)

API 인증키를 활용한 웹 크롤링 실습 -2 (공공데이터 포털 feat.xmltodict)

by 규딩코딩 2023. 8. 12.

API 인증키를 활용한 크롤링 실습 그 두번째 공공데이터 포털 데이터 활용편이다.

 

사용하려고 하는 데이터에 대한 정보와 인증키 발급은 이미 전 게시글에서 마친 상태이므로, 바로 실습을 진행하겠다.

 

2023.08.03 - [IT & 개발공부/파이썬(Python)] - 공공데이터 포털 인증키 발급 방법(부동산 실거래가 정보)

 

공공데이터 포털 인증키 발급 방법(부동산 실거래가 정보)

1. 회원가입 - 공공데이터 포털(https://www.data.go.kr/)메인 화면에서 회원가입 클릭(회원가입이 되어있다면 "2번"으로 이동) - 정보를 입력하고, 가입확인 클릭 - 전체 약관 동의 후 다음 단계 클릭 -

bmil2011s.tistory.com

 

2. 공공데이터 포털 활용

- 먼저 해당 데이터를 크롤링 하기 전, 데이터 키워드, XML/JSON 등 지원 여부 등을 살펴보기 위해 참고문서를 클릭하여 다운로드 받아보도록 하자

 

- 다음과 같이 API 서비스 명세를 확인할 수 있으며, 이중에서도 특히 "교환 데이터 표준"을 보면 해당 데이터는 XML만을 지원하는 것을 확인할 수 있다.

 

- 그렇다면 XML을 이용하여 크롤링 하는 방법은 다음의 코드를 이용하면 된다.

# XML 이용하여 데이터 불러오기
import requests
import pandas as pd 

serviceKey = 'YOUR_KEY'
pageNo = 1 # 페이지 번호
numOfRows = 1000 # 한 페이지 결과수
LAWD_CD = 11560 # 지역코드
DEAL_YMD = 202307 # 계약월
url = f'http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev?serviceKey={serviceKey}&pageNo={pageNo}&numOfRows=10&LAWD_CD={LAWD_CD}&DEAL_YMD={DEAL_YMD}'
req = requests.get(url)
req.text

결과 화면 일부 캡처

 

- 그러나 최종 결과와 목적을 생각했을 때, 이 데이터들을 pandas 를 이용해서 DataFrame을 만들어야 한다. 하지만 이전 게시글에서 비교가 되었겠지만 JSON 파일을 DF로 만드는 것과 XML 파일을 DF로 만드는 방법은 상당한 차이가 있었다.

- 그렇다면 여기서 근본적인 물음이 생겼는데, 앞으로도 XML만 지원해주는 데이터를 힘든 방법으로 DF로 만들어야 하는가?

 

- 고맙게도 소위 말하는 구글링을 통해 검색을 하게되면, 이미 많은 사람들이 같은 질문을 올렸고 같은 궁금증을 가진 사람이 해결한 경우를 많이 찾아볼 수 있다. 이번 경우에도 그랬다. xmltodict 모듈을 활용하면 XML 파일을 JSON 데이터처럼 dictionary 형태로 변환할 수 있었다...!! ( 아래 이미지 참고 )

 

- 위 코드와 아래 코드를 조합해보면, API 인증키를 이용하여 XML 데이터로 가져온 뒤, JSON 데이터처럼 만들고, DataFrame 까지 만드는 코드를 만들 수 있다.

import requests
import pandas as pd 
import xmltodict

serviceKey = 'YOUR_KEY'
pageNo = 1 # 페이지 번호
numOfRows = 1000 # 한 페이지 결과수
LAWD_CD = 11560 # 지역코드
DEAL_YMD = 202307 # 계약월
url = f'http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev?serviceKey={serviceKey}&pageNo={pageNo}&numOfRows=10&LAWD_CD={LAWD_CD}&DEAL_YMD={DEAL_YMD}'
req = requests.get(url)

data_dict = xmltodict.parse(req.text)
pd.DataFrame(data_dict['response']['body']['items']['item'])

결과 화면 일부 캡처

 

 

 

 

 

반응형