여성가족부에서 제공하는 성범죄자 지역별 통계 API로 데이터를 수집하는 방법을 알아본다.
개요
여성가족부에서 직접적으로 제공하는 유일한 API인 성범죄자 지역별 통계 API를 사용하여 데이터를 수집하는 방법을 알아보자. 해당 API 상세 페이지는 “https”가 아닌 “http”임으로 보안경고가 발생할 수 있으며 이를 무시하고 접근하면 다음의 화면을 볼 수 있다.
API 사용
이 API의 경우 API를 사용하기 위한 별도의 신청 절차나 API Key발급이 필요없으며 파라미터도 전혀 없다. 즉, 요청 URL만 알면 된다.
API Key 발급
이 API는 API Key가 필요 없다.
API 최초 요청
다음의 코드를 통해 API 최초 요청을 해보자.
1 | import requests |
XML 구조로 시도별 집계값이 들어있는 것을 볼 수 있다.
API 결과 정제
이제 BeautifulSoup을 사용하여 XML 결과를 Pandas DataFrame 으로 정제해보자.
1 | import pandas as pd |
각 값은 “city-name”태그와 “city-count”태그에 text로 들어있기에 우선 각 태그를 뽑아 “bs_city_name”, “bs_city_count”객체에 저장하였다.
그리고 해당 객체에서 텍스트를 리스트 내포(list comprehension)를 활용해서 뽑아본다면 다음과 같다.
1 | [e.text for e in bs_city_name] |
상기 코드를 활용해서 데이터프레임으로 정리해보면 다음과 같다.
1 | ls_city_name = [e.text for e in bs_city_name] |
name | count | |
---|---|---|
0 | 강원특별자치도 | 121 |
1 | 경기도 | 710 |
2 | 경상남도 | 191 |
3 | 경상북도 | 193 |
4 | 광주광역시 | 99 |
5 | 기타 | 546 |
6 | 대구광역시 | 122 |
7 | 대전광역시 | 71 |
8 | 부산광역시 | 179 |
9 | 서울특별시 | 391 |
10 | 세종특별자치시 | 8 |
11 | 울산광역시 | 47 |
12 | 인천광역시 | 200 |
13 | 전라남도 | 110 |
14 | 전북특별자치도 | 161 |
15 | 제주특별자치도 | 45 |
16 | 충청남도 | 183 |
17 | 충청북도 | 116 |
최종 정리한 코드는 다음과 같다.
1 | import pandas as pd |
name | count | |
---|---|---|
0 | 강원특별자치도 | 121 |
1 | 경기도 | 710 |
2 | 경상남도 | 191 |
3 | 경상북도 | 193 |
4 | 광주광역시 | 99 |
5 | 기타 | 546 |
6 | 대구광역시 | 122 |
7 | 대전광역시 | 71 |
8 | 부산광역시 | 179 |
9 | 서울특별시 | 391 |
10 | 세종특별자치시 | 8 |
11 | 울산광역시 | 47 |
12 | 인천광역시 | 200 |
13 | 전라남도 | 110 |
14 | 전북특별자치도 | 161 |
15 | 제주특별자치도 | 45 |
16 | 충청남도 | 183 |
17 | 충청북도 | 116 |
수집 범위에 따른 검토 사항
이 API는 언제 업데이트가 되는지, 최종 업데이트는 언제인지 등 다른 공공 API 대비 제공되는 정보가 매우 적다. 그래서 사실상 연습용으로 사용해보는 정도 이외에 활용 가치가 별로 없다.