뉴스 모니터링을 자동으로 하고 싶었던 이유
회사에서 우리 브랜드가 언급된 뉴스를 매일 확인해야 했어요. 매번 네이버에 들어가서 검색하고, 새로운 기사가 있는지 하나하나 보는 게 정말 번거로웠죠. 특히 여러 키워드를 확인해야 할 때는 시간이 꽤 걸렸어요.
그러다가 파이썬으로 자동화할 수 있다는 걸 알게 됐어요. 처음엔 어려워 보였지만, 생각보다 간단한 코드 몇 줄로 뉴스 제목을 모아볼 수 있더라고요. 이제는 아침에 컴퓨터 켜자마자 코드 한 번 실행하면 밤새 올라온 기사들을 한눈에 볼 수 있어요.
네이버 뉴스 크롤링 코드 단계별로 따라하기
먼저 필요한 도구부터 설치해야 해요. 명령 프롬프트나 터미널을 열고 아래 명령어를 입력하세요.
pip install beautifulsoup4 requests
설치가 끝났다면 이제 코드를 작성해볼게요. 가장 기본적인 형태부터 시작해보죠.
import requests
from bs4 import BeautifulSoup
# 검색하고 싶은 키워드 설정
keyword = '비트코인'
url = f'https://search.naver.com/search.naver?where=news&query={keyword}'
# 웹페이지 가져오기
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 뉴스 제목 찾기
articles = soup.select('.news_tit')
# 제목 출력하기
for article in articles:
print(article.text)
이 코드를 실행하면 비트코인 관련 최신 뉴스 제목들이 주르륵 나와요. 생각보다 간단하죠?
하지만 제목만 가져오면 아쉬우니까, 기사 링크도 함께 가져와볼게요.
import requests
from bs4 import BeautifulSoup
keyword = '삼성전자'
url = f'https://search.naver.com/search.naver?where=news&query={keyword}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 뉴스 제목과 링크 모두 가져오기
news_items = soup.select('.news_tit')
for item in news_items:
title = item.text
link = item.attrs['href']
print(f'제목: {title}')
print(f'링크: {link}')
print('-' * 50)
이렇게 하면 제목과 링크를 깔끔하게 정리해서 볼 수 있어요.
검색 결과가 여러 페이지에 걸쳐 있을 때는 어떻게 할까요? 네이버 뉴스는 페이지를 넘길 때마다 URL의 start 값이 10씩 증가해요. 이걸 활용해서 여러 페이지를 한 번에 가져올 수 있어요.
import requests
from bs4 import BeautifulSoup
import time
keyword = '전기차'
all_titles = []
# 1페이지부터 5페이지까지 가져오기
for page in range(5):
start_num = page * 10 + 1
url = f'https://search.naver.com/search.naver?where=news&query={keyword}&start={start_num}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
articles = soup.select('.news_tit')
for article in articles:
all_titles.append(article.text)
# 서버에 부담 주지 않기 위해 잠깐 쉬기
time.sleep(1)
# 전체 결과 출력
print(f'총 {len(all_titles)}개의 기사를 찾았습니다.')
for i, title in enumerate(all_titles, 1):
print(f'{i}. {title}')
여러 키워드를 한 번에 검색하고 싶다면 이런 방법도 있어요.
import requests
from bs4 import BeautifulSoup
import time
# 검색할 키워드 목록
keywords = ['인공지능', '메타버스', '블록체인']
results = {}
for keyword in keywords:
url = f'https://search.naver.com/search.naver?where=news&query={keyword}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
articles = soup.select('.news_tit')
results[keyword] = []
for article in articles:
results[keyword].append({
'title': article.text,
'link': article.attrs['href']
})
time.sleep(1)
# 결과 확인
for keyword, news_list in results.items():
print(f'\n[{keyword}] 관련 뉴스 ({len(news_list)}개)')
for news in news_list[:3]: # 각 키워드별로 상위 3개만 출력
print(f"- {news['title']}")
날짜별로 정리하고 싶다면 이런 식으로도 가능해요.
import requests
from bs4 import BeautifulSoup
from datetime import datetime
keyword = '애플'
url = f'https://search.naver.com/search.naver?where=news&query={keyword}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 뉴스 정보 가져오기
news_areas = soup.select('.news_area')
today = datetime.now().strftime('%Y년 %m월 %d일')
print(f'{today} {keyword} 관련 뉴스\n')
for area in news_areas[:10]:
# 제목 찾기
title_element = area.select_one('.news_tit')
if title_element:
title = title_element.text
link = title_element.attrs['href']
# 언론사 찾기
press = area.select_one('.info.press')
press_name = press.text if press else '알 수 없음'
print(f'[{press_name}] {title}')
print(f'링크: {link}\n')
실제로 사용해보니 달라진 점들
이제 매일 아침 파이썬 파일 하나만 실행하면 밤새 올라온 뉴스를 확인할 수 있어요. 엑셀 파일로 저장하도록 코드를 추가해서 보고서 작성할 때도 편하게 쓰고 있고요.
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
# 뉴스 데이터를 엑셀로 저장하는 코드
keyword = '스타트업'
url = f'https://search.naver.com/search.naver?where=news&query={keyword}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 데이터 수집
data = []
articles = soup.select('.news_tit')
for article in articles:
data.append({
'제목': article.text,
'링크': article.attrs['href'],
'수집일시': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
})
# 엑셀로 저장
df = pd.DataFrame(data)
filename = f'{keyword}_뉴스_{datetime.now().strftime("%Y%m%d")}.xlsx'
df.to_excel(filename, index=False)
print(f'{filename} 파일로 저장했습니다.')
물론 주의할 점도 있어요. 너무 자주 실행하면 네이버에서 차단할 수 있으니까 적당한 간격을 두고 사용하는 게 좋아요. 그리고 네이버가 페이지 구조를 바꾸면 코드를 수정해야 할 수도 있어요.
개인적으로 사용하는 건 문제없지만, 수집한 데이터를 상업적으로 이용하려면 저작권 문제를 확인해야 해요. 기사 내용을 그대로 가져가는 건 피하고, 제목과 링크 정도만 활용하는 게 안전해요.
이렇게 간단한 코드로 뉴스 모니터링을 자동화할 수 있어요. 처음엔 어려워 보여도 한 번 만들어두면 정말 편해요. 여러분도 필요한 키워드로 한번 시도해보세요.