최종 코드
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 페이지에서 정보를 수집하여 분석에 활용합니다. 이번 과제에서는 **"유산균"**을 검색한 후, 광고가 포함되지 않은 블로그 글의 제목과 작성자를 출력하는 웹 스크래핑을 구현합니다.
🚦 동작 원리 및 구조
- 사용자 입력 받기:
사용자가 검색어를 입력합니다. 입력된 검색어는 네이버에서 해당 키워드로 블로그 글을 검색하는 데 사용됩니다. 예를 들어 "유산균"을 입력하면, 유산균과 관련된 블로그 글들이 검색됩니다. - URL 생성 및 HTTP 요청:
입력된 검색어를 바탕으로 네이버 블로그 검색 페이지의 URL을 생성하고, requests.get() 함수를 통해 해당 URL에 HTTP 요청을 보냅니다. 이 요청은 네이버 웹페이지로부터 블로그 글 목록을 포함한 HTML 문서를 반환받습니다. - HTML 파싱:
네이버에서 반환받은 HTML 문서를 BeautifulSoup을 사용하여 파싱합니다. BeautifulSoup는 HTML 구조를 트리 형태로 변환하여, 쉽게 원하는 정보를 추출할 수 있도록 도와줍니다. soup 객체는 파싱된 HTML 데이터가 저장된 객체입니다. - 블로그 목록 추출:
select() 메서드를 사용하여, 페이지 내에서 블로그 글 목록을 포함하는 HTML 요소를 선택합니다. 각 블로그 글은 .view_wrap 클래스 내부에 포함되어 있으므로, soup.select(".view_wrap")을 사용하여 블로그 글 목록을 추출합니다. - 광고 필터링:
각 블로그 글에 대해 광고가 포함된 글은 .spblog.ico_ad 클래스를 가진 요소가 존재합니다. select_one(".spblog.ico_ad")를 사용하여 광고 아이콘이 있는지 확인하고, 광고가 없는 블로그만을 필터링하여 추출합니다. - 제목과 작성자 출력:
광고가 없는 블로그 글에 대해서는 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가 정확한지 확인하는 것이 중요합니다.
✅ 마무리 요약 및 복습 포인트
- 웹 스크래핑 개념: requests 라이브러리로 데이터를 요청하고, BeautifulSoup을 사용해 HTML을 파싱하여 필요한 데이터를 추출합니다.
- 광고 배너 확인: 각 블로그 포스트에서 광고가 포함된 경우를 제외하고, 원하는 정보를 출력합니다.
- 실제 예시 실행: "유산균"을 검색한 후 광고 없는 블로그의 제목과 작성자를 출력하는 예제를 구현했습니다.
📚 복습할 개념 체크리스트
- 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 |