[03] API

고근호·2023년 9월 5일

웹 크롤링 절차

# 1. 웹서비스분석 : 크롬 브라우저의 개발자도구 : URL
# 2. Request(URL) > Response(Data) : Data(json)
# 3. Data(json) > list, dict > DataFrame

API : application programing interface

# 프로그램을 이용해서 데이터를 제공하는 서비스
# 제 3자가 브라우저를 사용해서 데이터를 가져가는 것이 아니라,
  프로그램으로 데이터를 가져갈 수 있도록하는 서비스
# 어플리케이션 등록 > key 값을 수령

  • 파파고 번역 api
  • 통합검색어 트렌드 api
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import requests, json

0. request token 얻기

  • https://developers.naver.com
  1. Request Token 얻기 : 애플리케이션등록 -> app_key 획득
  2. app_key를 이용해서 데이터 가져오기
# client_id = 'rxUYTZMsErRXgOshFOI9'
# client_secret = '_tufrdzwVW'
# 어제와 다른 2가지 방법
 1. APP 등록 : key 받아서 request를 해야 함.
 2. document를 확인해서 url을 받아옴.

1. 파파고 번역 api

  • https://developers.naver.com/docs/papago/
  • 사용법
    • https://developers.naver.com/docs/papago/papago-nmt-api-reference.md

1. URL

url = 'https://openapi.naver.com/v1/papago/n2mt'
# headers
headers = { # 딕셔너리 데이터 타입
    'Content-Type' : 'application/json',
    'X-Naver-Client-Id': 'rxUYTZMsErRXgOshFOI9',
    'X-Naver-Client-Secret': '_tufrdzwVW'
}
headers

# data
ko_text = '웹크롤링은 재미있고 돈이 됩니다.'
params = {'source': 'ko', 'target':'en', 'text': ko_text}    
# 한국어를 영어로 바꿔줌
params
# 한글 인코딩
json.dumps(params)

2. Request(url,headers,data) > Response

# 인터넷 환경에서 데이터를 전달할때는 영문,숫자,특수문자만 사용가능
response = requests.post(url, json.dumps(params), headers=headers)
response

# <Response [400]> -> 에러가 나옵니다.
# json.dumps(params) 인코딩 하면 -> <Response [200]> 에러 해결됩니다.
response.text

3. json(str) > list, dict > text

en_text = response.json()['message']['result']['translatedText']
en_text

# 'Web crawling is fun and money.'

4. make function

def translate(ko_text):
    # 0. application key 
    client_id = 'rxUYTZMsErRXgOshFOI9'
    client_secret = '_tufrdzwVW'

    # 1. url, headrs, data
    url = 'https://openapi.naver.com/v1/papago/n2mt'

    # headers
    headers = { # 딕셔너리 데이터 타입
    'Content-Type' : 'application/json',
    'X-Naver-Client-Id': 'rxUYTZMsErRXgOshFOI9',
    'X-Naver-Client-Secret': '_tufrdzwVW'
    }
    # data
    params = {'source': 'ko', 'target':'en', 'text': ko_text}    
    # 한국어를 영어로 바꿔줌

    # 2. request(url, headers, data) > response(json)
    
    response = requests.post(url, json.dumps(params), headers=headers)

    # 3. json > dict > text
    en_text = response.json()['message']['result']['translatedText']

    return en_text
translate('파이썬은 재미있습니다.')
# 'Python is fun'
%ls covid.xlsx
# 한글엑셀파일 > 영문엑셀파일
df = pd.read_excel('covid.xlsx')    # 데이터 불러오기
df.tail(1)
%%time
df['en_title'] = df['title'].apply(translate)
df
df.to_excel('en_covid.xlsx', index=False, encoding='utf-8-sig')
%ls en_covid.xlsx
help(requests.post)

2. 통합검색어 트렌드 api [실습과제]

- 서비스 : `https://datalab.naver.com/keyword/trendSearch.naver`
- 내 애플리케이션 > dss 애플리케이션 > API 설정 > 데이터랩(검색어 트렌드) 추가
- 사용법 : `https://developers.naver.com/docs/serviceapi/datalab/
search/search.md#통합-검색어-트렌드`

공공 데이터 포털 [실습과제]

  • data.go.kr
  • 국토교통부(TAGO)카셰어링정보
  • https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15098557

0. application key

# 일반 인증키(Decoding)
key = 'r+nHgJEZl3heqMTIOqRHCurjmfc3AXb4+6dxSgB9cIvPFEJt85u51Pbv7xXkpfHCpLK7+jOqYTdOgnK+i1LL9g=='

1. url

zonename = '서울역'
url = 'http://apis.data.go.kr/1613000/CarSharingInfoService/getCarZoneListByName'
url += f'?serviceKey={key}&zoneName={zonename}&_type=json'
print(url)

2. request(url) > response(json)

response = requests.get(url)
response

# <Response [200]>

3. json > list, dict > DataFrame

response.json()['response']['body']['items']['item']
df = pd.DataFrame(data)
df.tail(2)

# 크롤링 완성
# 인코딩 디코딩 개념
# 파이썬으로 데이터를 다룰 때 사용하는 파일확장자
# csv   : 문자열 데이터 저장 : 입출력빠름 : 파일용량크다
# excel : 인코딩해서 저장 : 입출력느림 : 파일용량작음
profile
rootgo 매일, 꾸준히 성장하는 사람🌱

0개의 댓글