Chapter 3-1 Web Scraping 과제 (광고 x)

2025. 4. 16. 10:24·웹스크래핑과 데이터 수집

최종 코드

import requests
from bs4 import BeautifulSoup

# 사용자 에이전트 설정
header_user = { 
    "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

# 네이버 검색 URL
base_url = "https://search.naver.com/search.naver?ssc=tab.blog.all&sm=tab_jum&query="

# 사용자로부터 검색어 입력 받기
keyword = input("검색어를 입력하세요 : ")

# 검색 URL 생성
url = base_url + keyword
req = requests.get(url, headers=header_user)

# HTML 파싱
html = req.text
soup = BeautifulSoup(html, "html.parser")

# 블로그 포스트 리스트 추출
view_wrap = soup.select(".view_wrap")

# 각 블로그 포스트의 제목과 작성자 출력
for i in view_wrap:
    # 광고 아이콘이 있는지 확인
    ad = i.select_one(".spblog.ico_ad")
    
    # 광고가 아닌 경우만 제목과 작성자를 출력
    if not ad:
        title = i.select_one(".title_link").text  # 제목
        name = i.select_one(".name").text  # 작성자
        print(f"제목: {title}")
        print(f"작성자: {name}")
        print()

 


📌 개념 정리

웹 스크래핑(Web Scraping)은 웹사이트에서 자동으로 데이터를 추출하는 기법으로, HTML 페이지에서 정보를 수집하여 분석에 활용합니다. 이번 과제에서는 **"유산균"**을 검색한 후, 광고가 포함되지 않은 블로그 글의 제목과 작성자를 출력하는 웹 스크래핑을 구현합니다. 

🚦 동작 원리 및 구조

  1. 사용자 입력 받기:
    사용자가 검색어를 입력합니다. 입력된 검색어는 네이버에서 해당 키워드로 블로그 글을 검색하는 데 사용됩니다. 예를 들어 "유산균"을 입력하면, 유산균과 관련된 블로그 글들이 검색됩니다.
  2. URL 생성 및 HTTP 요청:
    입력된 검색어를 바탕으로 네이버 블로그 검색 페이지의 URL을 생성하고, requests.get() 함수를 통해 해당 URL에 HTTP 요청을 보냅니다. 이 요청은 네이버 웹페이지로부터 블로그 글 목록을 포함한 HTML 문서를 반환받습니다.
  3. HTML 파싱:
    네이버에서 반환받은 HTML 문서를 BeautifulSoup을 사용하여 파싱합니다. BeautifulSoup는 HTML 구조를 트리 형태로 변환하여, 쉽게 원하는 정보를 추출할 수 있도록 도와줍니다. soup 객체는 파싱된 HTML 데이터가 저장된 객체입니다.
  4. 블로그 목록 추출:
    select() 메서드를 사용하여, 페이지 내에서 블로그 글 목록을 포함하는 HTML 요소를 선택합니다. 각 블로그 글은 .view_wrap 클래스 내부에 포함되어 있으므로, soup.select(".view_wrap")을 사용하여 블로그 글 목록을 추출합니다.
  5. 광고 필터링:
    각 블로그 글에 대해 광고가 포함된 글은 .spblog.ico_ad 클래스를 가진 요소가 존재합니다. select_one(".spblog.ico_ad")를 사용하여 광고 아이콘이 있는지 확인하고, 광고가 없는 블로그만을 필터링하여 추출합니다.
  6. 제목과 작성자 출력:
    광고가 없는 블로그 글에 대해서는 select_one(".title_link").text와 select_one(".name").text를 사용하여 각각 제목과 작성자를 추출하고, 이를 출력합니다.

 

💻 코드 예시 및 흐름 분석

1. 사용자 입력을 받기

keyword = input("검색어를 입력하세요 : ")

설명:
사용자가 검색어를 입력받습니다. 이를 바탕으로 검색할 키워드를 설정하고, 해당 키워드에 대한 검색 결과를 요청합니다.

2. 요청 보내기

url = base_url + keyword
req = requests.get(url, headers=header_user)

설명:
사용자가 입력한 검색어를 바탕으로 네이버 블로그 검색 URL을 생성하고, requests.get()을 통해 해당 URL로 HTTP 요청을 보냅니다. 이때 사용자 에이전트 설정을 포함시켜 웹사이트가 요청을 정상적으로 받아들이게 합니다.

3. HTML 파싱

html = req.text
soup = BeautifulSoup(html, "html.parser")

설명:
받아온 HTML 데이터를 BeautifulSoup으로 파싱하여 HTML 구조를 트리 형태로 분석하고, 원하는 정보를 쉽게 추출할 수 있게 합니다.

4. 블로그 글 목록 추출

view_wrap = soup.select(".view_wrap")

설명:
각 블로그 글은 .view_wrap 클래스로 감싸져 있으므로, select(".view_wrap")을 사용하여 블로그 글 목록을 추출합니다.

5. 광고 필터링 및 제목, 작성자 추출

for i in view_wrap:
    ad = i.select_one(".spblog.ico_ad")
    if not ad:
        title = i.select_one(".title_link").text
        name = i.select_one(".name").text
        print(f"제목: {title}")
        print(f"작성자: {name}")
        print()

설명:
각 블로그 글에서 광고 아이콘을 확인하여, 광고가 포함되지 않은 블로그만 필터링합니다. select_one(".title_link").text를 통해 제목을, select_one(".name").text를 통해 작성자를 추출하여 출력합니다.


🧪 실전 사례

예시 실행:

검색어를 입력하세요 : 유산균
제목: 유산균 효능에 대한 모든 것
작성자: 건강지킴이

제목: 유산균 섭취의 중요성
작성자: 건강한 삶
검색어를 입력하세요 : 유산균 제목: 유산균 효능에 대한 모든 것 작성자: 건강지킴이 제목: 유산균 섭취의 중요성 작성자: 건강한 삶

🧠 고급 팁 or 자주 하는 실수

  • 광고 마크 확인: 광고가 포함된 블로그를 정확히 식별하려면 광고 아이콘의 클래스 이름을 정확히 지정해야 합니다. 만약 클래스 이름이 바뀌면 select_one()을 통해 광고 여부를 올바르게 확인할 수 없습니다.
  • 네이버의 HTML 구조 변경: 웹 페이지의 HTML 구조가 변경될 수 있기 때문에, 스크래핑 코드가 작동하지 않게 될 수 있습니다. HTML 구조를 주기적으로 점검하고, 코드에서 사용하는 클래스나 ID가 정확한지 확인하는 것이 중요합니다.

✅ 마무리 요약 및 복습 포인트

  1. 웹 스크래핑 개념: requests 라이브러리로 데이터를 요청하고, BeautifulSoup을 사용해 HTML을 파싱하여 필요한 데이터를 추출합니다.
  2. 광고 배너 확인: 각 블로그 포스트에서 광고가 포함된 경우를 제외하고, 원하는 정보를 출력합니다.
  3. 실제 예시 실행: "유산균"을 검색한 후 광고 없는 블로그의 제목과 작성자를 출력하는 예제를 구현했습니다.

📚 복습할 개념 체크리스트

  • HTTP 요청: requests.get()을 사용하여 웹 페이지에서 HTML 데이터를 요청하는 방법.
  • BeautifulSoup: HTML 문서를 파싱하여, 원하는 데이터를 쉽게 추출하는 방법.
  • CSS 선택자: select()와 select_one()을 사용하여 HTML 요소를 선택하는 방법.
  • 광고 필터링: 특정 광고 마크가 포함된 블로그 글을 제외하는 방법.
  • HTML 구조 이해: 네이버 블로그 검색 페이지에서 필요한 데이터를 추출하기 위한 HTML 구조 분석

 

'웹스크래핑과 데이터 수집' 카테고리의 다른 글

Chapter 3-3 Web Scraping 과제 (CGV 사이트에 있는 무비차트)  (0) 2025.04.16
Chapter 3-2 Web Scraping 과제 (find_all)  (0) 2025.04.16
Chapter 2-1 사람이 접속한것 처럼 보이는 방법  (0) 2025.04.15
Chapter 1-6 사람이 접속한것 처럼 보이는 방법  (0) 2025.04.15
Chapter 1-6 BeautifulSoup 설치하기  (0) 2025.04.15
'웹스크래핑과 데이터 수집' 카테고리의 다른 글
  • Chapter 3-3 Web Scraping 과제 (CGV 사이트에 있는 무비차트)
  • Chapter 3-2 Web Scraping 과제 (find_all)
  • Chapter 2-1 사람이 접속한것 처럼 보이는 방법
  • Chapter 1-6 사람이 접속한것 처럼 보이는 방법
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (472) N
      • Python (31)
      • 프로젝트 (43)
      • 과제 (21)
      • Database (40)
      • 멘토링 (7) N
      • 특강 (18)
      • 기술블로그 (126) N
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (34) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 3-1 Web Scraping 과제 (광고 x)
상단으로

티스토리툴바