웹 크롤링 기초: 파이썬으로 뉴스 제목 및 링크 수집 자동화 방법

매일 아침 출근 직후 업계 동향을 파악하기 위해 특정 키워드의 최신 뉴스를 검색하고, 제목과 링크를 수작업으로 복사하여 엑셀이나 사내 게시판에 공유하는 업무는 꽤나 번거롭습니다. 단순하지만 매일 반복되는 이 작업을 컴퓨터 프로그램에게 위임할 수 있는 기술이 바로 ‘웹 크롤링(Web Crawling)’입니다. 파이썬을 활용하면 단 몇 초 만에 수십 개의 최신 뉴스 제목과 접속 링크를 깔끔하게 수집하여 정리할 수 있습니다. 본 포스팅에서는 크롤링의 핵심 원리와 함께 실제 구동 가능한 네이버 뉴스 스크랩 스크립트 작성법을 다룹니다.

매일 아침 필요한 정보를 수작업으로 스크랩하는 업무 비효율

BeautifulSoup 및 requests 라이브러리 조합

파이썬 웹 크롤링을 구현할 때 가장 널리 쓰이는 표준 조합이 바로 requestsBeautifulSoup 라이브러리입니다. 작동 원리는 간단합니다. requests 패키지는 우리가 웹 브라우저를 켜고 주소창에 URL을 입력하는 것처럼, 파이썬 코드를 통해 웹 서버에 페이지 데이터를 달라고 요청(Request)하는 역할을 합니다. 그렇게 받아온 복잡한 HTML 텍스트 데이터에서 필요한 ‘뉴스 제목’과 ‘링크’ 태그만 핀셋으로 뽑아내듯 정밀하게 정제해 주는 도구가 바로 BeautifulSoup입니다. 실습에 앞서 명령 프롬프트(CMD)를 열고 아래 명령어로 두 패키지를 설치해야 합니다.

Bash

pip install requests beautifulsoup4

특정 키워드의 최신 뉴스 제목 리스트 자동 추출 스크립트

핵심 코드 리뷰 및 적용 방법

원하는 검색어(키워드)를 입력하면 해당 키워드로 검색된 네이버 뉴스의 제목과 링크를 한눈에 보기 좋게 추출해 주는 전체 파이썬 스크립트 코드입니다.

Python

import requests
from bs4 import BeautifulSoup

def get_naver_news(search_keyword):
    # 네이버 뉴스 검색 URL 생성 (검색어 포함)
    url = f"https://search.naver.com/search.naver?where=news&query={search_keyword}"
    
    # 봇(Bot) 차단을 방지하기 위해 일반 웹 브라우저로 접속한 것처럼 헤더 설정
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }
    
    # 웹페이지 HTML 가져오기
    response = requests.get(url, headers=headers)
    
    if response.status_code != 200:
        print("웹페이지 로드에 실패했습니다.")
        return
        
    # BeautifulSoup을 활용해 HTML 파싱
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 네이버 뉴스 제목과 링크가 담긴 HTML 태그 요소 선택 (뉴스 리스트 영역)
    # 네이버의 구조 변경에 따라 선택자(Selector)는 달라질 수 있습니다.
    news_titles = soup.select("a.news_tit")
    
    print(f"[{search_keyword}] 관련 최신 뉴스 수집 결과입니다.\n")
    
    for idx, news in enumerate(news_titles, 1):
        title = news.get_text()      # 텍스트(제목) 추출
        link = news.get("href")      # 속성값(링크 주소) 추출
        
        print(f"{idx}. {title}")
        print(f"   링크: {link}\n")

if __name__ == "__main__":
    # 수집하고 싶은 검색어 입력
    keyword = "업무 자동화"
    get_naver_news(keyword)

이 코드는 웹페이지의 HTML 구조 중 뉴스 제목을 의미하는 a.news_tit 클래스 선택자를 타겟팅하여 데이터를 가져옵니다. User-Agent 설정을 헤더에 포함하여 웹 서버가 프로그램의 무단 접근으로 오인해 접속을 차단하는 현상을 예방했습니다. 코드 하단의 keyword 변수에 본인이 매일 모니터링해야 하는 키워드(예: 인공지능, 반도체 등)를 넣고 실행하면, 복잡한 포털 화면을 거치지 않고 오직 정제된 헤더 뉴스와 URL만 터미널에 깔끔하게 출력됩니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤