Ssoon

[ 혼공데분 - Chapter02 ] 데이터 수집하기 - API 사용하기 본문

혼자 공부하는 데이터분석

[ 혼공데분 - Chapter02 ] 데이터 수집하기 - API 사용하기

구구달스 2024. 1. 10. 06:12

  API 란

  • Application Programming Interface
  • 두 프로그램이 서로 댛롸하기 위한 방법을 정의한 것
  • 애플리케이션 간의 통신을 위해서는 웹 기반의 API 가 널리 사용
  • 웹 기반 API
    • HTTP 프로토콜을 사용해 API를 만드는 것
    • 주로 CSV, JSON, XML 형태로 데이터를 전달

  파이썬에서 JSON 데이터 다루기

  • JSON (JavaScript Object Notation)
  • 파이썬의 딕셔너리 와 리스트를 중첩해 놓은 것과 비슷

  • 코랩에서 JSON 형식으로 파이썬 딕셔너리 생성
  • 웹 기반 API 로 전달할 때는 파이썬 딕셔너리가 아닌 텍스트로 전달

💠 파이썬 객체를 JSON 문자열로 변환하기 : json.dumps( ) 함수

  • 파이썬 json 패키지를 사용 딕셔너리 d 를 JSON 형식에 맞는 문자열로 변환

 

  • ensure_ascii=False ▶ 원래 저장된 문자를 그대로 출력
  • d_str type( ) 함수로 데이터 타입 확인

 

웹 기반 API 는 전송하려는 파이썬 객체를 json.dumps( ) 함수를 사용 JSON 문자열로 변환하여 전송

JSON 문자열을 파이썬 프로그램에 사용하려면 다시 파이썬 딕셔너리로 변환

💠 JSON 문자열을 파이썬 객체로 변환하기 : json.loads( ) 함수

  • d_str 문자열을 파이썬 딕셔너리로 변환

  • d2 타입 확인

 

웹 기반 API 에서 전달되는 데이터가 JSON 문자열이라면 json.loads( ) 함수를 사용해 파이썬 객체로 변환한 다음 분석 프로그램에서 사용

  • JSON 문자열을 json.loads( )함수에 직접 전달

  • 파이썬 딕셔너리 변환 후 "author" 키의 값인 두 번째 항목 출력

  • 도서 두 권을 JSON 개체로 표현하고 이를 대괄호 안에 콤마로 나열

  • JSON 배열을 파이썬 리스트로 변환 
  • d4[0] : 파이썬 리스트의 1번째 딕셔너리 
  • d4[0]['name'] : 1번째  딕셔너리의 "name" 키에 해당하는 값 반환

💠 JSON 문자열을 데이터프레임으로 변환하기 : read_json ( ) 함수

  • d4_str 문자열을 판다스 데이터프레임으로 변환
  • JSON 객체 두 개가 데이터프레임의 각 행에 매핑

  • JSON 문자열 ▶ 파이썬 객체 ▶ DataFrame 클래스 사용
  • d4_str 을 파이썬 객체로 변환한 d4를 사용해 데이터 프레임 생성

  파이썬에서 XML 데이터 다루기

  • XLM (eXtensible Markup Language)
  • 구조적이지 못하기 때문에 프로그램 간의 약속대로 전송하는 API 에서는 적절하지 않음

  • 엘리먼트 들이 계층 구조를 이루면서정보를 표현
  • 엘리먼트는 시작태그와 종료태그로 감싼다.

💠 XML 문자열을 파이썬 객체로 변화하기 : fromstring( ) 함수

  • XML 문자열을 x_str 변수에 저장

  • xml.etree.ElementTree 모듈의 fromstring( )함수 를 사용 x_str 문자열을 XML로 변환

  • type(  )함수로 fromstring( ) 함수가 어떤 객체를 반환하는지 book 변수 타입 확인

  • book 객의 tag 속성을 출력하면 엘리먼트 이름을 쉽게 확인

💠  자식 엘리먼트 확인하기 : findtext( ) 메서드

  • book객체를 리스트로 변환하여 자식 엘리먼트 확인
  • 리스트로 변환할 떄는 list( ) 함수 사용

  • book_childs 리스트 각 항목을 name, author, year 변수에 할당하고 text 속성으로 엘리먼트에 있는 텍스트 출력

  • XML은 자식 엘리먼트 순서가 항상 일정하다는 것을 보장하지 않음 ▶ 순서대로 자식 엘리먼트를 찾는 것은 위험
  • book 객체의 findtext( ) 메서드를 사용 ▶ 해당 자식 엘리먼트를 탐색하여 자동으로 텍스트를 반환
  • findtext( ) 메서드에 찾으려는 태그 이름을 넣어주면 자동으로 해당 엘리먼트를 찾아 텍스트로 변환

  • 두개의 <book> 엘리먼트 표현
  • XML은 JSON과 달리 배열 같은 구조가 없음 두 개의 <book> 엘리먼트를 감싸는 부모 엘리먼트를 만듬

  • x2_str 의 부모 엘리먼트는 <book> 이 아니라 <books> 가 됨
  • fromstring( ) 함수를 사용해 부모 엘리먼트 확인

💠  여러 개의 자식 엘리먼트 확인하기 : findall( ) 메서드와 for 문

  • 동일한 이름을 가진 여러 개의 자식 엘리먼트를 찾을 때 ▶ findall( ) 메서드와 for 문 사용
  • findall( ) 메서드가 반환하는 자식 엘리먼트 <book> 에서 'name', 'author', 'year' 를 찾아 출력

 

JSON : API에서 text 전달 -> json.loads()함수 -> 파이썬 객체로 변환 -> text 추출

XML : xml.etree.ElementTree 모듈에 있는 fromstring()함수 -> 부모 엘리먼트를 얻고 -> findall()메서드로 자식 엘리먼트에 담긴 text를 추출

  API로 20대가 가장 좋아하는 도서 찾기

💠  API를 호출하는 URL 작성하기

  • 도서관 정보나루 공개 API를 사용하려면 호출 URL 필요
http://data4library.kr/api/loanItemSrch?authKey=[발급받은키]&startDt=2022-01-01&endDt=2022-03-31&
gender=1&age=20&region=11;31&addCode=0&kdc=6&pageNo=1&pageSize=10
  • 호출 URL : http://data4library.kr/api/loanItemSrch
  • 파라미터
    • format : 지정하지 않으면 XML 문서로 반환 ; 여기서는 json으로 정의 JSON 문서로 받음
    • startDt : 검색 시작 일자 
    • endDt : 검색 종료 일자
    • age : 연령대
    • authKey : 인증키, 정보나루 사이트에서 인들키를 신청하여 받아야 함
  • 조회할 값은 호출 URL 뒤에 파라미터를 뒤에 연결
  • 파라미터과 값은 = 문자로 연결
  • 파라미터 사이는 & 문자로 연결
  • 호출 URL 과 파라미터는 ? 문자로 연결

=> HTTP GET 방식

  • 호출URL완성
http://data4library.kr/api/loanItemSrch?format=jason&startDt=2021-04-01&endDt=2021-04-30&age=20&authKey=인증키

💠  API 인증키 발급하기

도서관 정보나루 승인대기중

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  공개 API로 웹에서 데이터 가져오기

 
Comments