Python
키워드 기반 뉴스 크롤링 자동화 프로젝트 (Selenium + BeautifulSoup)
by ramzee
2025. 4. 1.
0. 이 글은 무엇을 위한 글인가요?
- 특정 키워드로 뉴스나 블로그를 자동 수집하고 싶어요!
- 검색어 입력하고, 여러 페이지 넘기고, 제목+링크를 가져오고 싶어요.
- Selenium과 BeautifulSoup을 활용해 완전 자동화하고 싶어요.
이 글에서는 네이버 뉴스 검색에서 키워드로 뉴스 제목과 링크를 자동 수집하는 실전 프로젝트를 진행합니다.
1. 목표 및 시나리오
- 사이트: 네이버 통합검색
- 목표:
- 키워드 입력 (예: "인공지능")
- 뉴스 탭 이동
- 1~5페이지까지 뉴스 제목 + 링크 수집
- DataFrame 정리 + CSV 저장
2. 필요한 라이브러리 설치
pip install selenium beautifulsoup4 pandas
그리고 ChromeDriver 다운로드 및 설치도 필요합니다.
3. 전체 코드 흐름
- Selenium으로 검색어 입력 + 페이지 이동
- BeautifulSoup으로 뉴스 제목 + 링크 추출
- Pandas로 정리 후 CSV 저장
4. 전체 코드 예제
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import time
import pandas as pd
# 크롬 드라이버 실행
driver = webdriver.Chrome()
driver.get('https://www.naver.com')
time.sleep(2)
# 검색어 입력
search_box = driver.find_element(By.NAME, 'query')
search_box.send_keys('인공지능')
search_box.send_keys(Keys.RETURN)
time.sleep(2)
# 뉴스 탭 클릭
driver.find_element(By.LINK_TEXT, '뉴스').click()
time.sleep(2)
results = []
# 1~5페이지 반복
for page in range(1, 6):
print(f"[{page}페이지 수집 중]")
soup = BeautifulSoup(driver.page_source, 'html.parser')
news_items = soup.select('a.news_tit')
for item in news_items:
title = item.get_text(strip=True)
link = item['href']
results.append({'제목': title, '링크': link})
try:
next_btn = driver.find_element(By.LINK_TEXT, str(page + 1))
next_btn.click()
time.sleep(2)
except:
print("더 이상 다음 페이지가 없습니다.")
break
driver.quit()
5. 출력 예시 (터미널)
[1페이지 수집 중]
[2페이지 수집 중]
...
[5페이지 수집 중]
6. 수집한 데이터 확인 및 저장
df = pd.DataFrame(results)
print(df.head())
df.to_csv('인공지능_뉴스_검색결과.csv', index=False, encoding='utf-8-sig')
출력 예시
제목 링크
GS리테일, 52g 활동으로 고객·현장 중심인공지능전환 전개 https://www.news1.kr/industry/distribution/5727891
야놀자, AWS와 여행 특화 버티컬 AI 구축 협업 강화 https://www.newsis.com/view/NISX20250321_0003107608
이재명, 오늘 '유발 하라리' 대담…인공지능주제 http://mbn.mk.co.kr/pages/news/newsView.php?category=mbn00006&news_seq_no=5101841
7. 크롤링 동작 핵심 요약
작업 |
코드 요약 |
검색창 찾기 |
driver.find_element(By.NAME, 'query') |
검색어 입력 |
.send_keys('키워드') + Keys.RETURN |
뉴스 탭 클릭 |
driver.find_element(By.LINK_TEXT, '뉴스') |
뉴스 링크 추출 |
soup.select('a.news_tit') |
페이지 이동 |
driver.find_element(By.LINK_TEXT, str(page + 1)) |
8. 자주 하는 실수 & 해결법
문제 |
해결 방법 |
뉴스가 안 나옴 |
뉴스 탭 클릭 확인 필요 |
페이지 이동 안 됨 |
다음 버튼 위치 확인 / 더 이상 페이지 없음 |
요소 못 찾음 |
HTML 구조 변경 여부 확인 |
브라우저 너무 자주 뜸 |
Headless 모드 사용 가능 |
9. 마무리 요약
- 검색어 기반으로 뉴스 → 여러 페이지 자동 수집
- 제목 + 링크 추출 → DataFrame 정리
- 자동화, 시각화, 분석으로 확장 가능