제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.13]
[강의 요약]
[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. 크롬 개발자 도구
크롬에서 구조 확인하는 방법
- 웹 페이지에서 마우스 우클릭 → 검사(Inspect) 클릭
- 원하는 데이터에 마우스를 올리고, 태그 구조 확인
- 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 : 웹 페이지에서 영화 제목만 모으기, 뉴스 본문만 추출하기 등
사용 흐름은 어떻게 될까?
- 웹에서 HTML을 불러오고
- BeautifulSoup으로 읽어서
- 원하는 태그나 속성을 찾는 것
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일반 강의 자료 일부를 발췌하여 작성되었습니다.”