Application Programming Interface
두 프로그램이 서로 대화하기 위한 방법을 정의한 것
웹 페이지를 서비스하기 위해 웹 서버 사용
ex) NGINX, Apache
HTTP라는 프로토콜(통신규약) 사용
인터넷에서 웹 페이지를 전송하는 기본 통신 방법
웹 서버 <-> 웹 브라우저
(sw 프로그램) ,,, html
HTTP 프로토콜을 사용해 API를 만든 것이 웹 기반 API
프로그램A <-> 프로그램B
CSV, JSON, XML -> 구조가 비교적 단순함
세 파일 모두 텍스트 파일임
각 행마다 항목의 개수가 정확하게 맞지 않으면 읽을 수 없고, 행과 열로만 이루어져 복잡한 데이터 구조를 표현하기 어려움
JavaScript Object Notation
딕셔너리와 리스트를 중첩해 놓은 것과 비슷한 느낌
키와 값으로 구성
{"key":"value"}
웹 기반 API가 사용하는 HTTP 프로토콜이 텍스트 기반이기 때문, HTTP 프로토콜로 데이터를 전송하려면 객체를 저장하거나 읽을 수 있게 객체를 텍스트로 변환해야 함 (직렬화) <-> 프로그램에서 실행 가능한 객체로 변환 (역직렬화)
eXtensible Markup Language
html는 웹 페이지를 표현하는 데에는 좋지만 구조적이지 못함
http://data4library.kr/api/loanItemSrch
-- 쿼리스트링 --
?authKey=[발급받은키]
&startDt=2022-01-01
&endDt=2022-03-31
& gender=1
&age=20®ion=11;31
&addCode=0&kdc=6
&pageNo=1
&pageSize=10
파라미터=값
파라미터&파라미터
호출URL?파라미터
format은 기본 XML
HTTP GET방식
: URL로 파라미터 값이나 데이터를 전달하는 것
d_str = json.dumps(d, ensure_ascii=False) # 직렬화
# ascii 코드가 아니면 16진수로 표현하기 때문에 False로 지정
print(d_str)
{"name": "혼자 공부하는 데이터 분석"}
d2 = json.loads(d_str) # 역직렬화
print(d2['name'])
혼자 공부하는 데이터 분석
import pandas as pd
pd.read_json(d4_str)
name author year
0 혼자 공부하는 데이터 분석 박해선 2022
1 혼자 공부하는 머신러닝+딥러닝 박해선 2020
import xml.etree.ElementTree as et
book = et.fromstring(x_str) # element 클래스의 객체
print(book.tag)
book
name = book.findtext('name') # 찾으려는 태그 이름을 넣어줌
author = book.findtext('author')
year = book.findtext('year')
print(name)
print(author)
print(year)
혼자 공부하는 데이터 분석
박해선
2022
book_childs = list(book)
print(book_childs)
name, author, year = book_childs
print(name.text)
print(author.text)
print(year.text)
name = book.findtext('name') # 찾으려는 태그 이름을 넣어줌
author = book.findtext('author')
year = book.findtext('year')
print(name)
print(author)
print(year)
for book in books.findall('book'):
name = book.findtext('name')
author = book.findtext('author')
year = book.findtext('year')
print(name)
print(author)
print(year)
print()
혼자 공부하는 데이터 분석
박해선
2022
혼자 공부하는 머신러닝+딥러닝
박해선
2020
pd.read_xml(x2_str)
name author year
0 혼자 공부하는 데이터 분석 박해선 2022
1 혼자 공부하는 머신러닝+딥러닝 박해선 2020
r = requests.get(url)
# requests 패키지의 Response 클래스 객체 반환
파이썬으로 공개 API를 호출해서 데이터를 받아냄
data = r.json()
print(data)
{'response': {'error': 'API 활성화 상태가아닙니다.'}}
url = 'http://www.yes24.com/Product/Search?domain=BOOK&query={}'
r = requests.get(url.format(isbn))
soup = BeautifulSoup(r.text, 'html.parser')
# 기본적으로 유니코드를 16진수로 저장
# force_ascii=False를 통해 한글이 제대로 보이게 할 수 있음
books_df.to_json('20s_best_book.json')
books_df.loc[[0,1], ['bookname', 'authors']]
books_df.loc[0:1, 'bookname':'authors']
bookname authors
0 우리가 빛의 속도로 갈 수 없다면 :김초엽 소설 지은이: 김초엽
1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예
iloc 메서드는 인덱스의 위치를 사용함
슬라이싱 가능 ; 파이썬과 다르게 마지막을 포함함
import requests
isbn = 9791190090018
url = 'https://www.yes24.com/product/Search?domain=BOOK&query={}'
r = requests.get(url.format(isbn))
scrapy와 같은 스크래핑 패키지의 인기도 높다 (requests + beautifulSoup 느낌.. 구글 코랩엔 설치 안 되어 있음)
lxml 패키지가 설치되어 있으면 우선적으로 사용함
(찾을 태그 이름, attrs 매개변수(찾으려는 태그의 속성을 딕셔너리로 지정))
soup = BeautifulSoup(r.text, 'html.parser')
prd_detail = soup.find('div', attrs={'id':'infoset_specific'})
print(prd_detail)
지정된 이름을 가진 첫번째 태그를 찾음
입력 데이터를 받아 데이터 구조를 만드는 것
입력 데이터를 받아 데이터 구조를 만드는 소프트웨어 라이브러리
json, xml 패키지가 각각 파서임
prd_tr_list = prd_detail.find_all('tr')
print(prd_tr_list) # 리스트로 반환
for tr in prd_tr_list:
if tr.find('th').get_text() == '쪽수, 무게, 크기':
page_td = tr.find('td').get_text()
break
page_count = top10_books.apply(get_page_cnt2, axis=1) # 1은 행에 적용
print(page_count)
top10_with_page_count = pd.merge(top10_books, page_count, left_index=True, right_index=True) # index를 기준으로 합침
top10_with_page_count
loc 메서드의 결과가 다른 하나는 4번!
행을 두 칸씩 건너띄는 (?) 형태임