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.
728x90
반응형