
BeautifulSoup
import requests
from bs4 import BeautifulSoup
keyword = input("검색어를 입력해 주세요 : ")
url = "https://search.naver.com/search.naver?ssc=tab.blog.all&sm=tab_jum&query=" + keyword
req = requests.get(url)
html = req.text
soup = BeautifulSoup(html,"html.parser")
result = soup.select(".view_wrap")
for i in result:
ad = i.select_one(".spblog.ico_ad")
if not ad:
title = i.select_one(".title_link").text
link = i.select_one(".title_link")["href"]
writer = i.select_one(".name").text
dsc = i.select_one(".dsc_link").text
print(f'제목 : {title}')
print(f'링크 : {link}')
print(f'작가 : {writer}')
print(f'글요약 : {dsc}')
print()
Selenium(셀레니움)
- 단순히 HTML을 가져오는 requests + BeautifulSoup 방식과는 역할이 좀 다르다.
기본 스크래핑 방식 (requests + BeautifulSoup)
- requests 로 HTML 소스코드를 받아오고
- BeautifulSoup 으로 그 안에서 원하는 태그/텍스트를 파싱합니다.
- 하지만 이 방식은 정적 페이지(Static Page) 에서만 잘 작동합니다.
- 즉, 서버에서 완성된 HTML을 그대로 보내주는 경우에만 가능해요.
- 예) 네이버 뉴스 본문, 블로그 글 같은 단순 HTML.
Selenium의 역할
- Selenium은 브라우저를 직접 조종하는 자동화 도구예요.
- 실제 크롬/파이어폭스 같은 브라우저를 실행시켜서 사람이 클릭/입력/스크롤 하는 행동을 프로그램이 대신 수행합니다.
- 그래서 동적 페이지(Dynamic Page), 즉 자바스크립트(JS)가 실행돼야 화면에 나타나는 데이터까지 가져올 수 있습니다.
- 예) 무한 스크롤 SNS, 로그인 후 보이는 페이지, 버튼을 눌러야 나오는 팝업, Ajax 로딩 데이터.
| 구분 | Requests + BeautifulSoup | Selenium |
|---|
| 방식 | HTML 소스 요청 → 파싱 | 실제 브라우저 실행 + 사용자 행동 흉내 |
| 속도 | 빠름 (HTML만 가져오면 끝) | 느림 (브라우저 켜고 렌더링까지 기다림) |
| 적합한 경우 | 정적 페이지, 단순 텍스트 수집 | 동적 페이지, 로그인 필요, 무한 스크롤 |
| 추가 기능 | 단순 HTML 파싱 | 클릭, 입력, 스크롤, 스크린샷 등 자동화 |
실행 코드 비교
1. requests + BeautifulSoup
import requests
from bs4 import BeautifulSoup
res = requests.get("https://example.com")
soup = BeautifulSoup(res.text, "html.parser")
print(soup.select_one("h1").text)
---------------------------------------------------------
2. Selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser = webdriver.Chrome()
browser.get("https://example.com")
time.sleep(2)
title = browser.find_element(By.TAG_NAME, "h1").text
print(title)
browser.quit()