본문 바로가기
Python

키워드 기반 뉴스 크롤링 자동화 프로젝트 (Selenium + BeautifulSoup)

by ramzee 2025. 4. 1.

0. 이 글은 무엇을 위한 글인가요?

  • 특정 키워드로 뉴스나 블로그를 자동 수집하고 싶어요!
  • 검색어 입력하고, 여러 페이지 넘기고, 제목+링크를 가져오고 싶어요.
  • Selenium과 BeautifulSoup을 활용해 완전 자동화하고 싶어요.

이 글에서는 네이버 뉴스 검색에서 키워드로 뉴스 제목과 링크를 자동 수집하는 실전 프로젝트를 진행합니다.


1. 목표 및 시나리오

  • 사이트: 네이버 통합검색
  • 목표:
    • 키워드 입력 (예: "인공지능")
    • 뉴스 탭 이동
    • 1~5페이지까지 뉴스 제목 + 링크 수집
    • DataFrame 정리 + CSV 저장

2. 필요한 라이브러리 설치

pip install selenium beautifulsoup4 pandas

그리고 ChromeDriver 다운로드 및 설치도 필요합니다.


3. 전체 코드 흐름

  1. Selenium으로 검색어 입력 + 페이지 이동
  2. BeautifulSoup으로 뉴스 제목 + 링크 추출
  3. 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 정리
  • 자동화, 시각화, 분석으로 확장 가능