웹 크롤링 절차
# 1. 웹서비스분석 : 크롬 브라우저의 개발자도구 : URL
# 2. Request(URL) > Response(Data) : Data(json)
# 3. Data(json) > list, dict > DataFrame
API : application programing interface
# 프로그램을 이용해서 데이터를 제공하는 서비스
# 제 3자가 브라우저를 사용해서 데이터를 가져가는 것이 아니라,
프로그램으로 데이터를 가져갈 수 있도록하는 서비스
# 어플리케이션 등록 > key 값을 수령
Naver API
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import requests, json
0. request token 얻기
https://developers.naver.com
- Request Token 얻기 : 애플리케이션등록 -> app_key 획득
- 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)
# 인터넷 환경에서 데이터를 전달할때는 영문,숫자,특수문자만 사용가능
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 : 인코딩해서 저장 : 입출력느림 : 파일용량작음