데이터 수집에 관한 API 통신 및 크롤링 학습!
첫 번째로 API에 대해 알아보겠습니다.
API 통신이란 무엇일까요?
다음시간에 학습할 크롤링의 경우, ⚠️HTML 구조를 이해하고 있어야 한다는 점과, ⚠️법적 이슈(합법인가?)가 있을 수 있어 조심스러운 부분입니다.
크롤링 대비 API 통신은 payload KEY 값(통신키)을 기반으로 간단한 호출구문을 통해 데이터를 송신받을 수 있다는 점에서 보다 간편한 방식이라고 이해해 주시면 좋을 것 같습니다.
- 은행 대출 vs 사채 대출 차이인가요?
- 네ㅎㅎ 그렇죠! 크롤링은 나중에 사채가 될 수 있어요(기업 쪽에서 소송할 수 있음)
권한 관리
프로그램 간 (원활한) 통신 지원
접속 표준화
DB에 접근하는 요청을 표준화 해줌
예시
"1번과 2번 서버에서 매출데이터 최근 1년치 가져와줘"
"1,2 서버 매출 2023-07-15~2024-07-14 가져와"
Q. 왜 API는 미리 데이터를 데이터 프레임으로 저장하지 않나요?
A. HTTP 기반의 데이터를 뽑아 오는 것이기 때문에 데이터 프레임이 아닌 두 가지 형식을 취하게 된답니다.(개발언어의 표현식을 따라감)
Q. API 공급자 입장에선 API를 구축하는 것 자체가 비용일텐데 왜 단순 웹게시가 아닌 API 형식으로 데이터를 공유하는 것일까요?
A1. 회사 사정에 따라 다르긴 하지만 웹 게시보다 API가 더 싼 경우도 많아요!
옛날에는 데이터 공개를 쉬쉬했지만 요즘은 트렌드가 바뀌어서 공개한 데이터를 가지고 수익을 창출하는 경우도 많아졌습니다.(다양한 사용자에게 기회 제공 & 데이터를 더 가져가고 싶으면 돈을 내라)
제공된 API로 좋은 프로덕트를 만들면 협업 제안도 함 → 제공사 입장에서도 더 큰 수익을 노릴 수 있음
e.g. 노션 api를 가지고 사업을 만드는 회사들(상용화하는 회사들에게 권리를 일부 주장할 수 있습니다)이 엄청 많습니다.
- 노션으로 만드는 블로그
- 노션으로 만드는 뉴스레터
- 노션으로 만드는 웹사이트 빌딩
또한 기업 이미지를 위해 오픈하는 경우도 있어요!(긍정적 이미지)
A2. 일부 데이터를 오픈하고자 할 때, 보안상의 이유로 API 방식으로 구성하기도 하는 듯 합니다.
요청에 따라 반출되는 데이터를 오픈하는 기업 입장에서 제어하기가 용이합니다.(허가된 사용자에게, 정상적으로 요청되는 데이터만 반출되도록)
데이터는 어떻게 주고받을 수 있을까요?
계층 | 프로토콜(규칙, 약속) 이름 |
---|---|
응용(Application) | HTTP, SMTP, FTP, Telnet |
표현(Presentation) | ASCII, MPEG, JPEG, MIDI |
전송(Transport) | TCP, UDP, SPX |
네트워크(Network) | IP, IPX |
데이터 링크(Data Link) | Ethernet, Token Ring, FDDI, Apple Talk |
🎯 IP 프로토콜: 한 컴퓨터에서 다른 컴퓨터까지 데이터를 전송하기 위한 절차와 방법을 정한 프로토콜
🎯 TCP 프로토콜: 네트워크의 혼잡도 등을 고려해 데이터의 흐름을 제어하고 데이터가 정확히 도착할 수 있게 하는 절차와 방법을 정한 프로토콜
→ 즉, 인터넷에서 정확한 목적지에 정확한 데이터를 전달하기 위해 가장 기본적인 프로토콜이 바로 TCP와 IP 프로토콜!
🎯HTTP 프로토콜: 웹 브라우저로 웹 사이트에 접속할 경우 따르는 규약에 대한 프로토콜
프로토콜 주요 기능
HTTP
HTTP API
API 통신 KEY 발급받기
주요 API 제공 사이트 목록
공공데이터포털 API 통신예제를 실습하기 위한 준비
python으로 직접 활용해보기
# 라이브러리 설치
# 최초 1회만 실행(이젠 아시죠?)
pip install requests
## 라이브러리 임포트
import requests
import pprint
import json
import pandas as pd
# 서울시 열린광장에서 복사해온 KEY 값과 URL 을 기입합니다.
# url 중 xml 부분을 json 으로 변경 -- *1
url = 'http://openapi.seoul.go.kr:8088/736567756761726439365543736d77/json/ServiceInternetShopInfo/1/5/'
# request library를 이용한 json file 로드
response = requests.get(url).json()
# json 데이터 확인
response
# json file 의 key 값 확인 (각 딕셔너리 값으로 이뤄져있음)
response['ServiceInternetShopInfo'].keys()
# json 파일의 row 데이터 로드
response['ServiceInternetShopInfo']['row']
# json file 형식을 dataframe 으로 받아주기
raw1 = pd.DataFrame(response['ServiceInternetShopInfo']['row'])
raw1.head()
raw1.T
requests.get(url).json()
requests
.get(url)
.json()
.json()
을 통해 JSON 형태로 받을 것