공부/python

혼자 공부하는 데이터 분석 2주차: 데이터 수집하기

무른2 2024. 7. 14. 22:11

 

 

API란

 

  • 두 프로그램이 서로 대화 방식을  정의 (데이터를 주고 받는 규칙을 맞춰주는 개념)
  • HTTP는 인터넷에서 웹 페이지를 전송하는 기본 통신 방법
  • 다양한 API 중 HTTP 프로토콜을 사용하는 웹 기반 API가 널리 사용된다.
  • HTML은 웹 페이지를 위한 표준 언어이며 마크업 언어라고 부른다.
  • 웹 기반 API에서 HTML 대신 csv,json,xml을 선호하는데 이유는 HTML의 구조가 복잡하기 때문이다.

 

 

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

 

  • JSON의 객체는 파이썬 딕셔너리와 유사한 형태이다.
d = {"name": "집에 가고 싶다"}
print(d['name'])

import json

#파이썬 객체를 json 형식에 맞는 텍스트로 바꾸기
d_str = json.dumps(d,ensure_ascii=False) #한글이 포함되어 있으므로 ensure_ascii 매개변수를 false지정
print(d_str)
print(type(d_str))

#json 문자열을 파이썬 객체로 반환하기
d2 = json.loads(d_str)
print(d2['name'])
print(type(d2))

 

json.dumps() 함수

  • 파이썬 객체를 json 문자열로 반환해주는 함수
  • 웹 기반 API로 데이터를 전달할 때는 파이썬 텍스트로 전달해야 하기 때문에 사용한다.
  • ensure_ascii 함수는 아스키 문자 외 다른 문자를 16진수로 출력한다는 특징이 있으므로
    한글을 제대로 출력하지 못한다. False로 지정시 원래 저장된 문자를 그대로 출력한다.

 

json.loads() 함수

  • json 문자열을 파이썬 객체로 변환하는 함수
  • json문자열을 파이썬 객체로 다시 변환하는 이유는 다른 프로그램으로 전달시 텍스트로 전송을 하되 프로그램에서 사용할시에는 다시 파이썬 객체로 반환하기 때문이다.

 

 

read_json() 함수

import pandas as pd
pd.read_json(d_str)
  • json 문자열을 데이터 프레임으로 변환하는 함수

 


 

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

 

 

import xml.etree.ElementTree as et
book = et.fromstring(x_str)
print(type(book))
print(book.tag)

#자식 엘리먼트 확인하기
name = book.findtext('name')
author = book.findtext('author')
print(name)
print(author)

 

fromstring()함수

 

  • XML 문자열을 파이썬 객체로 변환하는 함수

 

findtext() 메서드

  • fintext() 메서드는 해당하는 자식 엘리먼트를 탐색하여 자동으로 텍스트 반환
  • 여러 개의 자식 엘리먼트를 찾을 시 findall() 메서드를 사용

 


 

파이썬으로 API 호출하기: requests 패키지

 

import requests
url = **api 인증키를 넣은 호출 url 작성**
r = requests.get(url)
data = r.json()
print(data)

book_df = pd.DataFrame(data)
book_df.to_json('book_df.json')

 

 

  • get() 함수는 API 호출의 결과를 담고 있는 requests 패키지의 response 클래스 객체를 반환
  • json() 메서드는 웹 서버로부터 받은 json 문자열을 파이썬 객체로 변환하여 반환
  • to_json() 메서드는 데이터프레임을  json 파일로 저장

 

웹 스크래핑 사용하기

 

웹 스크래핑(웹 크롤링)

  • 웹사이트의 페이지를 옮겨가며 데이터를 추출하는 작업

파싱과 파서

  • 파서는 입력 데이터를 받아 데이터 구조를 만드는 소프트웨어 라이브러리/ 이 과정을 파싱이라고 함

 

 

 

웹 스크래핑 핵심 함수와 메서드

함수/메서드 기능
loc 레이블(이름) 또는 불리언 배열로 데이터프레임의 행과 열 선택
BeautifulSoup.find() 현재 태그 아래의 자식 태그 중에서 지정된 이름에 맞는 첫 번째 태그 찾음
BeautifulSoup.find_all() 현재 태그 아래의 자식 태그 중에서 지정된 이름에 맞는 모든 태그 찾음
BeautifulSoup.get_text() 태그 안의 텍스트 반환
Dataframe.apply() 데이터프레임의 행 또는 열에 지정한 함수 적용
pandas.merge() 데이터프레임이나 시리즈 객체를 합침

 

필수 숙제 + 추가 숙제