제로베이스 데이터 취업 파트타임/100일 챌린지_일일 학습 일지

제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.13]

김뚱입니다 2025. 5. 13. 22:37

[강의 요약]

[Part 04. EDA/웹 크롤링/파이썬 프로그래밍_ Ch 04. 웹 데이터 분석] 강의 수강

클립 01~09까지 강의 수강하였음

09_실습 - 크롬 개발자 도구 이용하기 - 4까지

🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰                                       ] 58/100일 (58%)

크롤링하고 봇 같은 것을 만들어본다고 해본 기억이 있다. 오랜만인 듯

 

 

 

[클립 01~09까지 정리]

▶ 1. 웹 데이터 분석?

웹 페이지에서 필요한 정보를 추출해서 Python으로 정리해서 수집과 정리를 할 수 있다.

이것을 바탕으로 분석하는 것

BeautifulSoup, urllib, 크롬 개발자 도구를 사용한다.

 

 

▶ 2. HTML이란?

  • 웹 페이지를 구성하는 기초 언어 (HyperText Markup Language)
  • 눈에 보이는 정보는 <body> 안에, 보이지 않지만 필요한 설정은 <head> 안에 담겨 있다.

 

HTML 문서 구조 예시는 다음과 같다.

<!DOCTYPE html>
<html>
  <head>
    <title>문서 제목</title>
  </head>
  <body>
    <h1>큰 제목</h1>
    <p>본문입니다</p>
  </body>
</html>

 

 

▶ 3. BeautifulSoup

설치는 다음과 같이 할 수 있다.

pip install beautifulsoup4

 

기본적인 코드 구조는 다음과 같다.

from bs4 import BeautifulSoup

with open("test_first.html", "r", encoding="utf-8") as f:
    soup = BeautifulSoup(f, "html.parser")
  • BeautifulSoup(html, parser) : HTML 문서를 분석할 객체 생성
  • html.parser : 내장 파서 (또는 lxml, html5lib 가능)
  • prettify() : 들여 쓰기로 HTML 구조 이쁘게 출력

 

 

▶ 4. 태그 검색 : find_all()

태그 전체 찾기 코드

soup.find_all('p')  # <p> 태그 모두 가져오기

 

특정 클래스 가진 태그 찾기 코드

soup.find_all('p', class_='text')  # class가 'text'인 p 태그만

 

id는 중복 불가. 단일 검색이 일반적임

soup.find('div', id='main')
  • find_all()은 결과를 리스트로 반환하며, 반복문으로 하나씩 꺼낼 수 있다.

 

 

▶ 5. 링크 찾기, 속성 추출

<a> 태그의 링크 주소 추출

a_tags = soup.find_all('a')
for tag in a_tags:
    print(tag['href'])
  • href 속성은 링크 주소를 의미
  • 딕셔너리처럼 tag['속성이름']으로 접근 가능

 

 

▶ 6. 크롬 개발자 도구

크롬에서 구조 확인하는 방법

  1. 웹 페이지에서 마우스 우클릭 → 검사(Inspect) 클릭
  2. 원하는 데이터에 마우스를 올리고, 태그 구조 확인
  3. ex: 환율이 <span class="value">로 되어 있음
<span class="value">1,320.00</span>

이 경우 파이썬으로 접근하려면

soup.find('span', class_='value').text

 

 

▶ 7. 웹페이지 연결, HTML 받아오기

urllib.request로 HTML 가져오기

from urllib.request import urlopen
url = "https://finance.naver.com/marketindex/"
response = urlopen(url)
html = response.read().decode("utf-8")

 

BeautifulSoup 적용

soup = BeautifulSoup(html, "html.parser")
  • .decode('utf-8')는 읽은 HTML을 문자열로 바꾸는 과정

 

 

[추가 정리]

▶ HTML이 대체 뭘까?

HTML이란

  • 웹 페이지의 뼈대를 만드는 언어
  • HyperText Markup Language의 약자이며, "정보의 구조를 나타내는 약속"이다.

 

기본 구조는 다음과 같다.

<html>
  <head>   ← 웹페이지 제목, 설정 등 (사용자에게 안 보임)
  <body>   ← 화면에 보여지는 모든 내용 (텍스트, 이미지 등)
  • <h1> ~ <h6> : 제목
    • <h1>큰제목</h1>
  •  <p> : 문단
    • <p>내용</p>
  •  <a> : 링크
    • <a href="주소">텍스트</a>
  •  <img> : 이미지
    • <img src="그림.jpg">
  •  <div> : 영역 구분
    • 여러 요소 묶을 때 사용
  •   <span> : 인라인 텍스트 강조
    • 특정 단어 강조 시 사용

 

태그는 항상 <열림></닫힘>으로 이루어져 있다.

 

 

▶ 무슨 수프요? BeautifulSoup는 또 뭘까?

BeautifulSoup이란?

  • HTML 문서를 분석해서, 원하는 정보만 쉽게 꺼낼 수 있게 도와주는 도구
  • ex : 웹 페이지에서 영화 제목만 모으기, 뉴스 본문만 추출하기 등

 

사용 흐름은 어떻게 될까?

  1. 웹에서 HTML을 불러오고
  2. BeautifulSoup으로 읽어서
  3. 원하는 태그나 속성을 찾는 것

 

from bs4 import BeautifulSoup
html = """
<html><body><h1>안녕</h1><p>첫 번째 문단</p></body></html>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup.find('h1').text)  # 안녕 출력
함수 설명 반환값
BeautifulSoup(문자열, 파서) soup 객체 생성 BeautifulSoup 객체
.find('태그') 첫 번째 해당 태그 찾기 태그 1개
.find_all('태그') 모든 해당 태그 찾기 리스트
.text 태그 안 글자만 추출 문자열
['속성이름'] href, src 등 속성 추출 문자열

 

링크만 모두 추출하는 코드를 보자.

a_tags = soup.find_all('a')
for tag in a_tags:
    print(tag['href'])
  • 크롬에서 F12 누르기 → '검사' 클릭
  • 원하는 부분 클릭하면 HTML 구조가 보임 → 태그 이름과 클래스 확인 가능
  • 그걸 기반으로 soup.find(태그, class_='클래스이름') 식으로 코드 작성

 

 

 

[나의 생각 정리]

BeautifulSoup은 사용해보지 않아서 몰랐는데 배울 수 있는 시간이었다.

개발자 도구는 웹 크롤링에서 몇 번 사용해서 어렵진 않았다.

 

 

[적용점]

데이터 분석(EDA)에서 사용

 

 

“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”