[혼공데분] 2주차 : Chapter 02

·2024년 7월 14일
0
post-thumbnail

2주차 진도(7/8 ~ 7/14) : Chapter 02

✅ 기본 미션

p. 150의 확인 문제 1번 풀고 인증하기


✅ 선택 미션

p. 137 ~ 138 손코딩 실습으로 원하는 도서의 페이지 수를 추출하고 화면 캡처하기



📖 내용 정리

API (Application Programming Interface)

  • 두 프로그램이 서로 대화하기 위한 방법 정의한 것
  • 인증된 URL → 필요한 데이터 편리하게 접근 가능
  • 웹 기반 API
    • HTTP 프로토콜 사용해 만든 API
    • 애플리케이션 간 통신 위해 널리 사용
    • 주로 CSV, JSON, XML 파일 사용
      • HTML 구조 복잡 → 프로그램 버그 가능성 🔺

HTTP (Hyper Text Transfer Protocol)

  • 웹 페이지 전송하는 기본 통신 방법
  • 웹 브라우저 - 웹 서버 프로그램 간 통신 시 사용하는 프로토콜(protocol)
    • 웹 브라우저 : 웹 서버에 웹 페이지 요청 (내 컴퓨터)
    • 웹 서버 : 요청에 맞는 웹 페이지를 웹 브라우저에 전송 (웹사이트)

HTML (Hypertext Markup Language)

  • 웹 브라우저가 화면에 표시할 수 있는 문서의 한 종류
  • 웹 페이지 위한 표준 언어
  • 확인 방법: [마우스 오른쪽 버튼] - [페이지 소스 보기]

JSON (JavaScript Object Notation)

  • 파이썬 딕셔너리 & 리스트 중첩해놓은 것과 비슷
    • JSON 객체
      • 중괄호 사용
      • 키(key) & 값(value)콜론(:) 연결
      • {"name":"혼자 공부하는 데이터 분석}
  • 웹 기반 API로 데이터 전달 시, 텍스트로 전달

type() 함수

  • 데이터 타입 확인 위해 사용

json.dumps() 함수

  • 파이썬 객체 → JSON 문자열 변환 시 사용
    import json
     
    d = {"name":"혼자 공부하는 데이터 분석} 
    d_str = json.dumps(d, ensure_ascii=False)   
  • 아스키(ASCII) 문자 외 다른 문자 → 16진수로 출력
  • ensure_ascii = False
    • d에 포함된 한글을 그대로 출력하기 하기 위해 사용

json.loads() 함수

  • JSON 문자열 → 파이썬 객체 변환
    d2 = json.loads(d_str)
  • 파이썬 프로그램에 사용 위해 변환 필요
    • HTML 프로토콜이 텍스트 기반 → 데이터 주고 받을 때 변환 필요
    • 직렬화(serialization) : 프로그램 상 객체를 저장 또는 읽을 수 있는 형태로 변환
    • 역직렬화(deserialization) : 직렬화된 정보를 다시 프로그램 실행 가능 객체로 변환

read_json() 함수

  • Pandas에서 JSON 문자열 → 데이터프레임 변환
    import pandas as pd
    
    d4 = json.loads(d4_str)
    
    pd.read_json(d4_str)
    pd.DataFrame(d4)

to_json() 함수

  • Pandas에서 데이터프레임 → JSON 파일로 저장
  • 한글 잘 보기 위해 force_ascii=False

XML 파일 (eXtensible Markup Language)

  • 엘리먼트(element)들이 계층 구조 이루며 정보 표현
    • 부모 엘리먼트(parent element)
      • 맨 먼저 등장
      • 루트 엘리먼트(root element), 부모 노드(parent node)
    • 자식 엘리먼트(child element)
      • 부모 엘리먼트의 하위 엘리먼트
    • 시작 태그 & 종료 태그로 감쌈(이름)
    • 태그
      • < 시작, > 종료
      • 이름 → 영문자, 숫자 사용
    • 규칙
      • 정보 잘 드러나게 이름 지정 (특수문자, 공백 ❌ / -, .으로 시작 ❌)
      • 자식 엘리먼트 여러 개 포함 → 부모 엘리먼트 복수형

fromstring 함수

  • XML 문자열 → 파이썬 객체 변환
    • ElementTree 모듈 아래 정의된 Element 클래스 객체 반환
       import xml.etree.ElementTree as et
        book = et.fromstring(x_str)
  • xml 패키지 사용
    • XML 문서 읽고 쓸 수 있는 API 제공

findtext() 함수

  • 자식 엘리먼트 탐색해 자동 텍스트 반환
    # 메서드 내 찾으려는 태그 이름 입력
     name = book.findtext('name')   

findall() 함수 + for

  • 동일 이름의 여러 개 자식 엘리먼트 찾을 때 사용
    # 메서드 내 찾으려는 태그 이름 입력
    for book in books.findall('book'):
    	name = book.findtext('name')   
        author = book.findtext('author')   
        year = book.findtext('year')   

read_xml() 함수

  • Pandas에서 XML → 데이터프레임 변환
    pd.read_xml(xml)  

API 호출 URL

  • API 사용 위해 필요

  • http 시작 → HTTP 프로토콜 사용 의미

  • 조회 방법

    • 호출 URL, 파라미터?문자로 연결 ➡️ HTTP GET 방식
    • 파라미터, 값=로 연결
    • 파라미터 사이&문자로 연결

requests 패키지

  • 파이썬에서 URL 호출해 데이터 받는 방법

    import requests
    
    # HTTP GET 방식으로 파라미터 값 전달, Response 클래스 객체 반환
    r = requests.get(url)
    
    # JSON 문자열을 파이썬 객체로 변환
    data = r.json()
    
    # 보기 좋은 형태로 만들기
    ...


웹 스크래핑 (web scraping) / 웹 크롤링 (web crawling)

  • 프로그램으로 웹사이트 페이지 옮겨 가며 데이터 추출하는 작업

웹 스크래핑 시 주의점

  • 웹사이트에서 스크래핑 허용했는지 확인robots.txt에서 확인
  • HTML 태그 특정 가능한지 확인

loc() 함수

  • 데이터프레임 행 & 열 선택 (인덱스, 열 이름 사용)
  • 대괄호 사용해 행 목록, 열 목록 받음
    • 슬라이스 연산자(:) 사용 가능

      books_df.loc[[0,1], ['bookname','authors']]
      
      books_df.loc[0:1, ['bookname','authors']]

iloc() 함수

  • 인덱스 위치 사용해 행 & 열 선택
    books_df.loc[[0,1], [2,3]]


뷰티플 수프 (Beautiful Soup)

  • HTML에서 데이터 추출 시 사용

    • HTML 태그 찾아 파싱(parsing)
  • BeautifulSoup()

    • 매개변수 1 = 파싱할 HTML 문서
    • 매개변수 2 = 파싱에 사용할 파서(parser)
      • 입력 데이터 받아 데이터 구조 만드는 소프트웨어 라이브러리
      from bs4 import BeautifulSoup
    
      # 클래스 객체 생성
      soup = BeautifulSoup(r.text, 'html.parser')
    
      # 태그 위치 찾기
      prd_link = soup.find('a', attrs={'class':'gd_name'})
      
      # 태그 모두 찾기
      prd_tr_list = prd_detail.find_all('tr')

find() 함수

  • 태그 위치 찾을 때 soup 객체에 사용
  • 지정된 이름 가진 첫번째 태그
  • 매개변수 attrs
    • 찾으려는 태그 속성 → 딕셔너리로 지정

findall() 함수

  • 특정 HTML 태그 모두 찾아 리스트 반환

get_text() 함수

  • 태그 안의 텍스트 가져올 때 사용


apply() 함수

  • 데이터프레임 각 행 또는 열의 반복 작업 수행 위해 사용
  • 매개변수 axis
    • 0 지정 → 에 적용
    • 1 지정 → 에 적용

merge() 함수

  • Pandas에서 2개의 데이터 프레임 합치거나 데이터프레임 + 시리스 합칠 때 사용
  • left_index, right_index = True → 두 객체 인덱스 기준 합침

0개의 댓글