본문 바로가기
Python/Snippet

[Python] 네이버 뉴스 검색 프로그램 만들기: requests와 BeautifulSoup 활용 방법

by Maccrey Coding 2024. 9. 17.
728x90
반응형

 

이번 포스팅에서는 파이썬을 사용해 네이버 뉴스를 검색하고 결과를 추출하는 방법을 다룹니다.

특히 초보자도 이해할 수 있도록 requests와 BeautifulSoup 라이브러리를 활용하여 실제 동작하는 프로그램을 작성하고, 코드 한 줄 한 줄 자세히 설명하겠습니다.

검색 기능을 구현하고 싶으신 분들은 이 글을 통해 쉽게 따라 할 수 있을 것입니다.

사용 라이브러리 소개

  • requests: 파이썬에서 HTTP 요청을 쉽게 할 수 있게 도와주는 라이브러리입니다.
  • BeautifulSoup: HTML과 XML 파일을 파싱(구문 분석)할 때 사용되는 라이브러리입니다. 주로 웹 스크래핑에 많이 활용됩니다.

라이브러리 설치

pip install requests beautifulsoup4

코드 전체

import requests
from bs4 import BeautifulSoup

def naver_news_search(query):
    print(f"'{query}'로 검색 중입니다...")
    
    # 네이버 뉴스 검색 URL (최신순 정렬: &sort=1)
    url = f"https://search.naver.com/search.naver?where=news&query={query}&sort=1"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    
    # HTTP 요청 보내기
    response = requests.get(url, headers=headers)
    if response.status_code != 200:
        print(f"Failed to retrieve data: {response.status_code}")
        return
    
    # HTML 파싱
    soup = BeautifulSoup(response.text, 'html.parser')
    news_items = soup.find_all('a', class_='news_tit')
    print(f"추출된 뉴스 개수: {len(news_items)}")
    
    # 뉴스 목록 저장
    news_list = []
    for item in news_items:
        title = item['title']  # 뉴스 제목
        link = item['href']    # 뉴스 링크
        news_list.append({'title': title, 'link': link})
    
    return news_list

# 검색어 입력 받기
print("검색어 입력 단계입니다.")
query = input("검색어를 입력하세요: ")

# 입력된 검색어 출력 및 뉴스 검색 실행
print(f"입력된 검색어: {query}")
news = naver_news_search(query)

# 검색 결과 출력
if news:
    print(f"'{query}' 검색 결과:")
    for idx, item in enumerate(news, 1):
        print(f"{idx}. 제목: {item['title']}")
        print(f"   링크: {item['link']}\n")
else:
    print("검색 결과를 가져올 수 없습니다.")

코드 설명

1. 라이브러리 임포트

import requests
from bs4 import BeautifulSoup
  • requests: HTTP 요청을 처리하기 위한 라이브러리입니다. 이 코드를 통해 네이버에 검색 요청을 보냅니다.
  • BeautifulSoup: 네이버에서 받은 HTML 코드를 파싱해서, 우리가 필요한 뉴스 제목과 링크를 추출할 때 사용합니다.

2. 네이버 뉴스 검색 함수 정의

def naver_news_search(query):
    print(f"'{query}'로 검색 중입니다...")
  • naver_news_search: 이 함수는 입력된 query(검색어)를 기반으로 네이버에서 뉴스 검색 결과를 가져옵니다.
  • query: 사용자가 입력한 검색어로 네이버 뉴스에서 관련 뉴스를 검색하는 데 사용됩니다.
  • print(f"'{query}'로 검색 중입니다..."): 사용자가 어떤 검색어로 검색하고 있는지 출력해주는 부분입니다.

3. 네이버 뉴스 URL 구성

url = f"https://search.naver.com/search.naver?where=news&query={query}&sort=1"
  • 네이버 뉴스 검색 결과 페이지의 URL을 만듭니다.
  • query는 사용자가 입력한 검색어이고, &sort=1은 최신순으로 정렬하기 위한 옵션입니다.

4. HTTP 요청 헤더 설정

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
  • User-Agent: 웹사이트가 봇이 아닌 실제 사용자의 브라우저에서 요청하는 것처럼 보이게 하기 위한 헤더입니다. 네이버와 같은 사이트들은 봇의 접근을 차단하기도 하므로, 이 설정이 중요합니다.

5. HTTP 요청 보내기

response = requests.get(url, headers=headers)
if response.status_code != 200:
    print(f"Failed to retrieve data: {response.status_code}")
    return
  • requests.get: 위에서 구성한 url로 GET 요청을 보냅니다. headers를 함께 전달하여 봇으로 인식되지 않도록 합니다.
  • response.status_code: 네이버 서버에서 보내주는 응답 상태 코드를 확인합니다. 상태 코드가 200이면 성공, 그렇지 않으면 실패를 의미합니다. 실패한 경우 에러 메시지를 출력하고 함수가 종료됩니다.

6. HTML 파싱 및 뉴스 데이터 추출

soup = BeautifulSoup(response.text, 'html.parser')
news_items = soup.find_all('a', class_='news_tit')
  • response.text: 네이버에서 반환된 HTML 코드입니다.
  • BeautifulSoup(response.text, 'html.parser'): BeautifulSoup을 이용해 HTML을 파싱합니다.
  • soup.find_all('a', class_='news_tit'): 네이버 뉴스 페이지에서 모든 뉴스 제목을 찾습니다. 네이버 뉴스의 제목 링크는 항상 class='news_tit'을 가지고 있으므로, 이를 기반으로 모든 뉴스 항목을 추출합니다.

7. 뉴스 목록 저장

news_list = []
for item in news_items:
    title = item['title']  # 뉴스 제목
    link = item['href']    # 뉴스 링크
    news_list.append({'title': title, 'link': link})
  • news_list: 추출한 뉴스 데이터를 저장할 리스트입니다.
  • for item in news_items: news_items 리스트에 있는 모든 뉴스 아이템을 반복하면서 제목과 링크를 추출합니다.
  • news_list.append({'title': title, 'link': link}): 추출한 뉴스 제목과 링크를 딕셔너리 형태로 리스트에 저장합니다.

8. 검색어 입력 받기

print("검색어 입력 단계입니다.")
query = input("검색어를 입력하세요: ")
  • 사용자로부터 검색어를 입력받는 코드입니다.
  • input(): 콘솔 창에서 검색어를 입력받습니다.

9. 검색 결과 출력

if news:
    print(f"'{query}' 검색 결과:")
    for idx, item in enumerate(news, 1):
        print(f"{idx}. 제목: {item['title']}")
        print(f"   링크: {item['link']}\n")
else:
    print("검색 결과를 가져올 수 없습니다.")
  • if news: 검색 결과가 있을 경우 뉴스 목록을 출력하고, 없으면 "검색 결과를 가져올 수 없습니다."라고 출력합니다.
  • enumerate(news, 1): 뉴스 목록을 순서대로 번호를 붙여 출력합니다.

 

이번 포스팅에서는 파이썬으로 네이버 뉴스를 검색하고 결과를 출력하는 간단한 프로그램을 작성해보았습니다.

requests와 BeautifulSoup 라이브러리의 기본적인 사용법을 익히고, 웹 스크래핑의 기본적인 과정을 이해할 수 있었습니다.

해당 코드를 응용하면 네이버 뉴스뿐 아니라 다른 검색 엔진에도 적용할 수 있습니다.

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

728x90
반응형