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

API 인증키를 활용한 웹 크롤링 실습 -3 (서울 열린데이터 광장)

by 규딩코딩 2023. 8. 12.

 

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

 

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

2023.08.03 - [IT & 개발공부/파이썬(Python)] - 서울시 부동산 실거래가 정보 API 크롤링 인증키 발급

 

서울시 부동산 실거래가 정보 API 크롤링 인증키 발급

1. 회원가입 - 우상단의 회원가입 클릭 - 보통은 일반회원일테니, 일반회원을 클릭(기업 또는 외국인 회원은 해당 절차에 따라주기 바람) - 잘 읽어보시고 동의/비동의 후 제일 마지막에 다음 단

bmil2011s.tistory.com

 

3. 공공데이터 포털 활용

- 이번에도 먼저 데이터 명세서를 다운로드 받아서, API 데이터 기본 정보를 조사한다.

 

- 요청인자, 저작권, 적재주기, 최종수정일 등을 파악하고 특히 "요청파일 타입"을 보도록 하자.

- 이번에는 다행히도 요청가능한 파일의 형태로 xml , json 이 둘 다 가능한 것으로 나온다.

 

- 다음의 코드를 이용하면 해당 자료를 json 데이터로 가져와 DataFrame으로 만들 수 있다.

import requests
import json
import pandas as pd
SERVICE_KEY = 'YOUR_KEY'
url = f'http://openapi.seoul.go.kr:8088/{SERVICE_KEY}/json/tbLnOpendataRtmsV/1/1000/2022/11560'
req = requests.get(url)
content = req.json()
result = pd.DataFrame(content['tbLnOpendataRtmsV']['row'])
result

 

* (content['tbLnOpendataRtmsV']['row']) 로 설정한 이유

 

* 데이터 프레임 코드 결과 참고

 

- 다음으로는 더 실용적인 기능을 익히기 위한 코딩이라고 할 수 있겠다. 무엇인가 하면, 서울 열린데이터 광장에서는 한 번 데이터 요청을 할 때 최대 1000건을 넘을 수 없다. 그래서 한 번에 크롤링도 1000건씩 밖에 할 수 없어서 불편한 것이다.

 

- 하지만 파이썬의 반복문을 이용하면, 원하는 데이터의 총량이 1000건이 넘더라도 크롤링할 수 있다. 다음의 코드를 살펴보자.

import requests
import json
import pandas as pd

SERVICE_KEY = 'YOUR_KEY'

data_list = []

for start_idx in range(1, 12001, 1000):
    end_idx = min(start_idx + 999, 12000)
    url = f'http://openapi.seoul.go.kr:8088/{SERVICE_KEY}/json/tbLnOpendataRtmsV/{start_idx}/{end_idx}/2022/11680'
    content = requests.get(url).json()
    data_list.extend(content.get('tbLnOpendataRtmsV', {}).get('row', []))

result = pd.DataFrame(data_list)
print(result)

- 먼저 반복되는 데이터들을 다 담기위해 리스트를 선언해준다.

- requests.get(url).json() 을 사용하여 해당 URL로 GET 요청을 보내고, 응답을 JSON 형식으로 파싱하여 content 변수에 저장한다(* 서울시 공공데이터 포털로부터 받아온 데이터)

- data_list.extend(content.get('tbLnOpendataRtmsV', {}).get('row', [ ]))

  content.get('tbLnOpendataRtmsV', {}): 응답 데이터인 content에서 'tbLnOpendataRtmsV'라는 키를 찾고, 만약 해당 키가 존재하지 않으면, 빈 딕셔너리({})를 반환

  .get('row', []): 이전 단계에서 찾은 'tbLnOpendataRtmsV' 키에 해당하는 값(딕셔너리로 반환된)에서 'row'라는 키를 찾고, 만약 'row' 키가 존재하지 않으면, 빈 리스트([])를 반환

  data_list.extend: 이전 단계에서 얻은 리스트를 data_list에 확장하여 추가한다. 이렇게 함으로써 응답 데이터에서 추출한 실제 데이터를 data_list에 추가하는 역할을 한다. ( * .extend 메서드는 리스트를 다른 리스트에 추가하는 데 사용되는 파이썬 내장 함수)

 

반복문으로 형성한 data_list 결과이며, ~는 아래가 아니라 오른쪽으로 쭉 이어진다고 생각하면 되곘다.

이렇게 API 크롤링을 위해 필요한 기본적인 기능들을 배워, 실습을 통해 실용적 지식을 학습할 수 있었다.

 

 

 

 

 

반응형