일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Neural Network
- 모델평가
- 머신러닝
- Pooling Layer
- 데이터처리
- explained AI
- fashion mnist
- NewsWhale
- bias
- 딥러닝
- 데이터크롤링
- AWS 입문자를 위한 강의
- plot_model
- MaxPooling2D
- 크롤링
- kt에이블스쿨
- OneHotEncoding
- pandas
- learning_rate
- CNN
- CRISP-DM
- 인공지능
- CIFAR-10
- 키워드 기반 뉴스 조회
- AI
- 뉴스웨일
- CNN 실습
- Convolution Neural Network
- 데이터
- 데이터분석
- Today
- Total
jjinyeok 성장일지
웹크롤링 # 2 Open API - 2022/08/03~2022/08/05 본문
1. Open API란?
다양한 회사나 기관에서 Open API를 제공한다. Open API를 사용해서 데이터를 수집하는 것은 서비스에 데이터를 제공하는 공식적인 방법으로 데이터를 수집하는 방법이다. Open API가 제공되는 상황이라면 Open API를 이용하는 것이 좋다. 대표적으로 Open API를 제공해주는 네이버 개발자 센터(https://developers.naver.com/main/), Kakao Developers(https://developers.kakao.com/) 등이 있다.
2. Open API 프로세스
- App 등록 -> application_key : App을 등록하여 application_key를 발급받는다.
- API 문서 확인 -> URL, params, header : API 문서를 확인하여 알맞은 형식의 URL과 params, header를 찾는다.
- request(url, params, headers(application_key)) -> response(json) : json(str) : URL, params, header와 함께 request를 보내고 json 형식의 문자열을 response 받음
- json(str) -> list, dict -> DataFrame or Text : 문자열 형식의 json을 리스트나 딕셔너리 자료형으로 바꾸고 데이터프레임 자료형 혹은 text 자료형으로 재가공함
결국 json 형식의 response로 받아와 가공하는 과정이기 때문에 동적 페이지 크롤링과 프로세스가 비슷하다. 파파고 Open API 서비스 예시를 통해 정리해보도록 하자.
1. App 등록 -> application_key, 2. API 문서 확인 -> URL, params, header
1, 2번 프로세스 같은 경우 내가 정리하기보다는 각 Open API 제공 서비스의 document가 정말 정리가 잘 되어있고 각 사이트마다 조금씩 다르기 때문에 때문에 document를 통해 보도록 하자. 네이버 개발자 센터 API 공통 가이드(https://developers.naver.com/docs/common/openapiguide/)와 Kakao Developers 애플리케이션 등록(https://developers.kakao.com/docs/latest/ko/getting-started/app)을 확인하자.
파파고 Open API의 경우, URL은 https://openapi.naver.com/v1/papago/n2mt, params는 source (원본 언어의 언어 코드), target (목적 언어의 언어 코드), text (번역할 텍스트)가 필수적이고, headers로는 Content-Type과 X-Naver-Client-Id, X-Naver-Client-Secret가 필수적이다. 이때 X-Naver-Client-Id, X-Naver-Client-Secret 값으로 App을 등록할 때 받은 application_key 값을 설정한다. 과정은 다음과 같다.
CLIENT_ID, CLIENT_SECRET = 'App 등록 후 받은 application_key', 'App 등록 후 받은 application_key'
url = 'https://openapi.naver.com/v1/papago/n2mt'
txt = '크롤링은 재밌습니다.'
params = {
'source': 'ko',
'target': 'en',
'text': txt,
}
headers = {
'Content-Type': 'application/json',
'X-Naver-Client-Id': CLIENT_ID,
'X-Naver-Client-Secret': CLIENT_SECRET,
}
3. request(url, params, headers(application_key)) -> response(json) : json(str)
동적 페이지 크롤링과 마찬가지로 request를 보낸 후 response를 받아오는 과정은 동일하다. 또한 requests.get() 메서드 안에 url과 params, headers 값을 채워 request를 보내는 것 또한 동일한데 하나 추가적으로 생각해야 할 부분이 있다. 이번 params에 text가 한글로 들어가 있다. 인터넷 트래픽에서는 영문, 숫자, 특수문자만 사용이 가능하다. 따라서 request를 보낼 때 한글 데이터를 사용하는 경우 json.dumps() 메서드를 사용해서 한글을 인코딩한 상태로 request를 보내야 한다. 과정은 다음과 같다.
import requests, json
response = requests.post(url, json.dumps(params), headers=headers)
print(response)
# <Response [200]>
print(response.text)
# {"message":{"result":{"srcLangType":"ko","tarLangType":"en","translatedText":"Crawling is fun.","engineType":"N2MT","pivot":null,"dict":null,"tarDict":null},"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0"}}
4. json(str) -> list, dict -> DataFrame or Text
문자열 형식의 json을 json() 메서드를 이용해 가공한 뒤 원하는 값만 불러온다. 과정은 다음과 같다.
print(response.json()['message']['result']['translatedText'])
# Crawling is fun.
이 과정을 하나의 번역할 텍스트를 parameter로 하고 번역된 텍스트를 return 하는 함수로 구현한 코드는 다음과 같다.
def translate_text(text):
"""This function is translate text by using NAVER Open API
Params
------
text: str: text to be translated
Return
------
type: str: translated text
"""
import requests, json
CLIENT_ID, CLIENT_SECRET = 'App 등록 후 받은 application_key', 'App 등록 후 받은 application_key'
url = 'https://openapi.naver.com/v1/papago/n2mt'
params = {
'source': 'ko',
'target': 'en',
'text': text,
}
headers = {
'Content-Type': 'application/json',
'X-Naver-Client-Id': CLIENT_ID,
'X-Naver-Client-Secret': CLIENT_SECRET,
}
response = requests.post(url, json.dumps(params), headers=headers)
return response.json()['message']['result']['translatedText']
print(translate_text('Open API를 사용하는 것은 재밌습니다.'))
# It's fun to use the Open API.
정리를 하면서 느낀게 Open API는 정말 종류도 많고 다양한 기관에서 제공한다. 내가 만들 서비스에 걸맞는 Open API를 찾는 역량 또한 중요할 것 같다.
'[KT AIVLE School]' 카테고리의 다른 글
웹크롤링 # 4 Selenium - 2022/08/03~2022/08/05 (0) | 2022.08.14 |
---|---|
웹크롤링 # 3 정적 페이지 크롤링 - 2022/08/03~2022/08/05 (0) | 2022.08.08 |
웹크롤링 # 1 동적 페이지 크롤링 - 2022/08/03~2022/08/05 (0) | 2022.08.07 |
Python 라이브러리 # 2 pandas - 2022/08/01~2022/08/02 (0) | 2022.08.05 |
Python 라이브러리 # 1 NumPy - 2022/08/01~2022/08/02 (0) | 2022.08.02 |