Taeyoung Kim

Cloud & Platform

Python Web Crawling 정리

Python Web Crawling 정리 학습 내용을 정리한 백필 노트입니다.

이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.

1. 준비

  • 프로젝트 폴더 구조:

    Documents/project/codeDocuments/project/data 폴더 생성


2. 웹 크롤링 이해

  • 웹 크롤링: 검색 엔진이 자동으로 웹을 탐색해 링크/정보를 수집.
  • 웹 스크레이핑: 웹 페이지에서 원하는 특정 정보를 추출.
  • 차이: 크롤링은 링크/페이지 탐색, 스크레이핑은 실제 데이터 추출.
  • 프로세스:
    1. HTTP 요청 → 응답 확인
    2. 데이터 추출 → 전처리
    3. 파일 저장
  • 주의사항:
    • 무단 수집 시 저작권/법률 위반 가능
    • 반드시 robots.txt 확인 및 사이트 관리자 승인 필요

3. HTTP 통신 기초

  • HTTP: 클라이언트–서버 간 데이터 전송 프로토콜
  • 요청 방식: GET (조회용), POST (데이터 생성/업데이트)
  • URL 구조: Scheme + Domain + Path + Query String
  • 응답 코드:
    • 2XX 성공
    • 3XX 리다이렉트
    • 4XX 클라이언트 오류
    • 5XX 서버 오류
  • Python 코드: requests.get(url), requests.post(url, json, headers)

4. HTML 요소 기초

  • HTML: 웹 페이지 구조 정의 (태그, 속성, 콘텐츠 포함)
  • 주요 태그: <h1>~<h6>, <p>, <table>, <a>, <img>, <div>
  • CSS 선택자 / XPath: HTML 요소 선택 방식
  • BeautifulSoup 활용:
    • soup.select("CSS 선택자")
    • soup.find_all(name="태그")

5. 크롬 개발자 도구 활용

  • Network 탭: HTTP 요청/응답 확인
  • Elements 탭: HTML 요소 탐색
  • 활용: 요청 URL, Header, Payload 확인 → 크롤링 코드에 반영

6. 웹 크롤링 실습

(1) 현재 주가 수집

  • 대상: 네이버 증권
  • 방법: 종목코드 활용 → requestsBeautifulSoup
  • 함수 생성: stock_price(ticker) → 현재 주가 반환

(2) 시가총액 상위 50위 주가 수집

  • 대상: 네이버 증권 시가총액 페이지
  • 데이터: 상위 50개 종목명과 현재가 추출
  • 리스트 컴프리헨션 활용

(3) 주요 시장지표 수집

  • 대상: 네이버 증권 시장지표 페이지
  • 수집: 화폐 단위, 환율 정보
  • BeautifulSoup 클래스 상속 → 사용자 정의 메서드(html_text)로 확장

(4) 증권 주요 뉴스 수집

  • 대상: 네이버 증권 주요 뉴스
  • 수집: 뉴스 제목, 링크, 등록일
  • pandas.DataFrame으로 저장

7. Open API 활용

  • API 개념: 프로그램 간 데이터 교환 인터페이스
  • Open API: 인증 후 누구나 사용 가능, 보통 XML/JSON 형식 응답
  • 이용 프로세스:
    1. 활용 신청
    2. API Key 발급
    3. HTTP 요청 시 Key 포함
    4. XML/JSON 응답 처리
  • 데이터 처리 라이브러리:
    • XML → xmltodict
    • JSON → json
  • 국내 주요 Open API:
    • 공공데이터포털, 서울열린데이터광장, 경기데이터드림, ECOS, OPEN DART, KOSIS