웹 스크래핑

김기훈·2025년 9월 18일

이론

목록 보기
2/10

BeautifulSoup

import requests
# requests: 웹 페이지의 HTML을 가져오기 위해 사용. (HTTP 요청/응답 처리)
from bs4 import BeautifulSoup
# BeautifulSoup: 가져온 HTML을 파이썬 객체로 변환해서 원하는 태그/클래스 요소를 쉽게 찾도록 도와줌.

keyword = input("검색어를 입력해 주세요 : ")
url = "https://search.naver.com/search.naver?ssc=tab.blog.all&sm=tab_jum&query=" + keyword
# 네이버 블로그 검색 결과 페이지의 URL을 만듦. 
# query= 뒤에 사용자가 입력한 keyword를 붙여 검색 쿼리 완성.

req = requests.get(url) 
# 지정한 URL로 GET 요청을 보냄.
html = req.text
# 응답으로 받은 HTML 소스를 문자열로 꺼냄.

soup = BeautifulSoup(html,"html.parser") 
# 가져온 HTML을 파싱(분석)해서 soup 객체 생성.
# "html.parser"는 HTML 태그 구조를 이해하고 파이썬에서 다룰 수 있게 해줌
result = soup.select(".view_wrap")
# .view_wrap 클래스를 가진 모든 요소를 리스트 형태로 가져옴.

for i in result:
    ad = i.select_one(".spblog.ico_ad") 
    # 광고 게시물 여부 확인 (광고면 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 + BeautifulSoupSelenium
방식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)  # JS 로딩 기다리기
                    title = browser.find_element(By.TAG_NAME, "h1").text
                    print(title)
                    browser.quit()

profile
안녕하세요.

0개의 댓글