[Python] Web Crawling - 공공데이터 크롤링

거친코딩·2021년 5월 10일
0
post-thumbnail

파이썬을 활용한 웹 크롤링 #5


  • 공공데이터 포털
    - 공공데이터 포털 : 정부에서 운영하는 사이트



실습 1

  • 기상청_동네예보 조회서비스 API 활용
    - ✔ 상세한 API설명은 오픈 API 활용가이드를 참고해야 한다.

  • 활용 신청을 하면 다음과 같이 이루어진다. ( 보통 1~2시간 이내로 이루어짐 )

  • 승인 신청을 하면 아래와 같이 이루어진다.

  • 승인이 완료되면 아래와 같이 이루어진다.

  • 우리가 사용할 데이터가 요구하는 것 및 산출물 형태를 확인한다.

  • 미리 입력 폼에 인자값들을 입력해서 테스트를 하고, 해당 flow대로 개발을 진행하면 좋다.

  • 입력에 필요한 정보들 역시 오픈 API 활용가이드를 다운받으면, 특정 정보들을 참고할 수 있다.

  • 승인이 되고, 본인의 키를 service키에 넣어서 위 과정을 테스트 해본다.

  • 위 과정을 테스트 해보면 다음과 같은 결과가 나오고, 테스트한 URL을 복사하여서 앞으로 crawling 실습에 사용하겠다.

  • 다음은 위 과정을 통해 실제 Python으로 API를 활용하여 정보를 크롤링 하는 예제

실습 2

  • 실습을 위해서 활용 신청을 위에서 했던 것처럼 똑같이 진행한다.

  • 위 실습을 위해서 행전표준코드관리시스템에 들어가서, 법정동을 클릭하고, 자기가 조회하고 싶은 동을 선택하여 확인한다.

pip install xmltodict

  • 테스트 해본 페이지의 url을 통해, 아래와 같이 Python으로 API를 활용하여 정보를 크롤링하는 예제
df.info() # columns ['일','거래금액']이 정수형이 아니라 object타입으로 되어 있다. 

> <class 'pandas.core.frame.DataFrame'>
RangeIndex: 94 entries, 0 to 93
Data columns (total 13 columns):
#   Column   Non-Null Count  Dtype 
---  ------   --------------  ----- 
 0   거래금액     94 non-null     object
 1   건축년도     94 non-null     object
 294 non-null     object
 3   법정동      94 non-null     object
 4   아파트      94 non-null     object
 594 non-null     object
 694 non-null     object
 7   전용면적     94 non-null     object
 8   지번       94 non-null     object
 9   지역코드     94 non-null     object
 1094 non-null     object
 11  해제사유발생일  1 non-null      object
 12  해제여부     1 non-null      object
dtypes: object(13)
memory usage: 9.7+ KB


# 일자와 거래금액을 int형으로 바꾼다.
df['일'] = df['일'].astype('int')
# 거래금액의 경우, 콤마(.)가 있기 때문에 바로 타입변환이 안되고, 콤마를 제거해주고 변환해준다.
df['거래금액'] = df['거래금액'].apply(lambda x : int(x.replace(',','')))
df.info()

> <class 'pandas.core.frame.DataFrame'>
RangeIndex: 94 entries, 0 to 93
Data columns (total 13 columns):
#   Column   Non-Null Count  Dtype 
---  ------   --------------  ----- 
 0   거래금액     94 non-null     int64 
 1   건축년도     94 non-null     object
 294 non-null     object
 3   법정동      94 non-null     object
 4   아파트      94 non-null     object
 594 non-null     object
 694 non-null     int64 
 7   전용면적     94 non-null     object
 8   지번       94 non-null     object
 9   지역코드     94 non-null     object
 1094 non-null     object
 11  해제사유발생일  1 non-null      object
 12  해제여부     1 non-null      object
dtypes: int64(2), object(11)
memory usage: 9.7+ KB


df = df.sort_values(by=['일','거래금액']) # 일과 거래금액 기준으로 재정렬(오름차순)
df
>	거래금액	건축년도	 년	법정동	아파트	               월	일	전용면적	지번	지역코드	층	해제사유발생일	해제여부
30	78700	2009	2021	정릉동	정릉2차e-편한세상	4	1	59.37	1035	11290	4	None	None
50	90000	2010	2021	길음동	길음뉴타운8단지(래미안)	4	1	59.9	1284	11290	2	None	None
49	117800	2019	2021	길음동	래미안길음센터피스	4	1	59.97	498	11290	7	None	None
75	11800	2013	2021	하월곡동	삼전솔하임34	2	15.54	88-510	11290	7	None	None
2	49000	1991	2021	돈암동	돈암현대아파트	4	2	41.58	1	11290	3	None	None
...	...	...	...	...	...	...	...	...	...	...	...	...	...
85	11200	2013	2021	하월곡동	삼전솔하임34	27	15.62	88-510	11290	6	None	None
74	106500	2005	2021	종암동	아이파크종암동 24	27	84.73	131	11290	8	None	None
88	12900	2019	2021	장위동	석계역 한일노벨리아시티	4	28	14.7145	8-2	11290	11	None	None
86	55000	1985	2021	하월곡동	동신주택	4	28	72.43	70-4	11290	4	None	None
48	80000	2009	2021	정릉동	정릉2차e-편한세상	4	28	59.37	1035	11290	3	None	None
profile
데이터 분석 유튜버 "거친코딩"입니다.

0개의 댓글