selenium 공부를 먼저 하다가 selenium 마지막 내용인 동적 스크래핑 하려는데, BeautifulSoup4 (bs4) 내용이 들어가서 급하게 bs4 기초 공부 !

나도코딩 님 영상 중 chapter 10-11. BeautifulSoup4 기본1, 2
https://www.youtube.com/watch?v=yQ20jZwDjTE
BeautifulSoup4
- BeautifulSoup4 : 실제로 우리가 스크래핑 하기 위해 사용되는 패키지
- lxml : 구문을 분석하는 파서 (가장 강력하고 빠른 파서 중 하나로, 특히 bs4, selenium과 함께 많이 사용)
파서 (parser)
HTML, XML 같은m문자열 형태의 문서를
트리 구조로 분석(Parsing) 해서, 프로그래밍 언어가 데이터를 다루기 쉽게 만드는 도구
즉, “HTML 문서를 사람이 아닌 프로그램이 읽고, 구조적으로 이해하게 만들어주는 것.”
1. 설치
terminal에 아래 코드 입력 : bs4 설치
pip install beautifulsoup4
설치가 잘 됐는지 / 어떤 버전에 입력되었는지 확인
Location 부분에서 보시면 Python.3.11 로 되어있음 = Python 3.11 버전에 설치된 것
pip show beautifulsoup4
#터미널에 출력된 값
#Name: beautifulsoup4
#Version: 4.14.2
#Summary: Screen-scraping library
#Home-page:
#Author:
#Author-email: Leonard Richardson <leonardr@segfault.org>
#License: MIT License
#Location: C:\Users\Administrator\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages
#Requires: soupsieve, typing-extensions
만약, 설치된 파이썬 버전이 아닌 다른 버전 사용 중이시라면 :
Ctrl + Shift + P 클릭 > 위에 검색란에 "interpreter" 검색 > 3.11 버전 (bs4 설치된 버전) 클릭


terminal에 아래 코드 입력 : lxml 설치
pip install lxml
2. requests, BeautifulSoup 세팅
연습할 사이트 : 네이버 웹툰 / 뉴스
import requests
from bs4 import BeautifulSoup
url = "https://comic.naver.com/index"
res = requests.get(url)
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
# 우리가 가지고 온 html 문서를 lxml 파서를 통해서 bs4 객체로 만든것
# soup이라는 녀석이 모든 정보를 가지게 됨
3. 원하는 element 출력
1. 웹스크래핑 원하는 사이트 html에 대해 지식 보유한 경우
soup을 이용하여 원하는 내용 출력


print(soup.title)
print(soup.title.get_text()) # text만 따로 가지고 올 수 있음
print(soup.div) # 처음으로 발견되는 div element를 출력
print(soup.div.attrs) # 속성 정보를 딕셔너리 형태로 출력
print(soup.div["id"]) # div element의 id 속성 '값' 정보를 출력
#######값
<title>네이버 웹툰</title>
네이버 웹툰
<div id="root"></div>
{'id': 'root'}
root
soup. : 원하는 element 출력
get_text() : text만 따로 가지고 올 수 있음
.attrs : 속성 정보를 딕셔너리 형태로 출력
soup.div["id"] : div의 id 속성 값 출력
2. 일반적으로는 웹스크래핑 대상 페이지에 대해 잘 모름 => 위 방식보다는 아래 방식이 더 유용
원하는 부분을 클릭하여 html 확인
예시 )
h2 이므로 soup.find("h2")
class 뒤에 붙여넣기 *****여기서 class뒤에 _ 언더바 추가해야함
.get_text() 를 통해 text만 가져오기

title = soup.find("h2", class_="container__title_url-text container_spotlight-package__title_url-text").get_text()
print(title)

(참고로 영상과 같이 네이버 웹툰 페이지를 beautifulsoup을 통해 불러오려 했으나, None만 뜸 ..... 너무 답답해서 뉴스로 연습해보니 바로 됨.
지식인에 따르면; " 네이버 웹툰 페이지의 내용은 JavaScript로 동적으로 로드되기 때문에, BeautifulSoup을 사용하여 직접적으로 접근하는 것만으로는 페이지의 전체 내용을 가져오기 어려울 수 있습니다." 라고 함. )
출처: https://m.kin.naver.com/qna/dirs/10501/docs/465145263
3. 거꾸로 텍스트를 가지고 태그 가지고 오기
Gaza ~~ 라는 뉴스명을 가지는 h2 태그를 가지고 오고 싶은 경우, text를 이용하면 됨
soup.find("가지고 오고 싶은 글의 태그", text= "가지고 오고 싶은 글")
news = soup.find("h2", text="Gaza ceasefire appears to survive first major test")
print(news)
#값 : <h2 class="container__title_url-text container_spotlight-package__title_url-text" data-editable="title">Gaza ceasefire appears to survive first major test</h2>
'공부 & 프로젝트 > 파이썬' 카테고리의 다른 글
| [파이썬] vs code 에 pandas, torch, konlpy, okt 설치 방법 (0) | 2025.10.22 |
|---|---|
| [파이썬] 웹크래핑 활용 3-2 : BeautifulSoup4 (0) | 2025.10.20 |
| [파이썬] 웹스크래핑 기초 5-4: Selenium 동적 페이지 웹스크래핑 (0) | 2025.10.20 |
| [파이썬] 웹크래핑 기초 5-3: Selenium 활용 - 네이버 항공권 (0) | 2025.10.20 |
| [파이썬] 웹크래핑 기초 5-2: Selenium 심화 - 로그인 (0) | 2025.10.20 |