파이썬(Python)

[파이썬 실전] FastAPI로 '나만의 네이버 뉴스 검색기' 만들기 (크롤링 + API 연동)

달마-* 2026. 1. 25. 13:28
반응형

지난 시간엔 FastAPI가 무엇인지 알아봤죠? 오늘은 이론 공부 그만하고, 바로 실전으로 들어갑니다. 우리가 매일 검색하는 '네이버 뉴스', 매번 들어가서 검색하기 귀찮으시죠?

파이썬으로 **"내가 원하는 키워드만 입력하면, 최신 뉴스를 싹 긁어와서 정리해 주는 서버"**를 만들어보겠습니다. 이 기술만 익히면 주식 뉴스, 부동산 정보, 경쟁사 동향 파악까지 전부 자동화할 수 있습니다.


1. 준비물 (라이브러리)

요리는 재료 손질부터죠. 터미널(VS Code)을 열고 아래 명령어 한 줄로 필요한 도구를 설치합니다.

Bash
 
pip install fastapi "uvicorn[standard]" requests beautifulsoup4
  • FastAPI & Uvicorn: 서버를 만들고 실행하는 도구
  • Requests: 네이버 서버에 "뉴스 좀 주세요"라고 요청하는 우편 배달부
  • BeautifulSoup4: 배달 온 뉴스(HTML)에서 제목과 링크만 쏙쏙 뽑아내는 칼

2. 핵심 로직: 크롤링 함수 만들기

먼저 뉴스를 가져오는 기능부터 만듭니다. 네이버 뉴스 검색 주소의 규칙을 파악해서 코드로 옮기면 됩니다.

Python
 
import requests
from bs4 import BeautifulSoup

def get_naver_news(query: str, display: int = 5):
    # 1. 네이버 뉴스 검색 주소 (query=검색어)
    base_url = "https://search.naver.com/search.naver?where=news"
    url = f"{base_url}&query={query}"
    
    # 2. 서버에 요청 보내기 (사람인 척 헤더 추가)
    headers = {"User-Agent": "Mozilla/5.0 ..."}
    response = requests.get(url, headers=headers)
    
    # 3. 데이터 뜯어내기 (파싱)
    soup = BeautifulSoup(response.text, "html.parser")
    news_items = soup.select(".news_tit")  # 네이버 뉴스 제목의 클래스 이름
    
    results = []
    for item in news_items[:display]:
        title = item.get_text()
        link = item['href']
        results.append({"title": title, "link": link})
        
    return results

[달마의 해설]

  • query: 우리가 검색할 단어(예: 삼성전자, AI)를 받습니다.
  • soup.select(".news_tit"): 네이버 개발자 도구(F12)를 켜보면 뉴스 제목들이 .news_tit라는 명찰을 달고 있습니다. 이걸 콕 집어 가져오는 겁니다.

3. 서버에 탑재하기 (FastAPI 연동)

이제 위에서 만든 기능을 FastAPI에 연결만 하면 끝입니다. 코드가 얼마나 짧은지 보세요.

Python
 
from fastapi import FastAPI

# 앱 생성
app = FastAPI()

# 주소 만들기: /news?query=검색어
@app.get("/news")
def search_news(query: str, display: int = 5):
    # 아까 만든 크롤링 함수 실행
    news_data = get_naver_news(query, display)
    
    # 결과를 JSON(데이터 덩어리)으로 반환
    return {"keyword": query, "articles": news_data}

이게 끝입니다. Django나 Flask였다면 설정하느라 한참 걸렸을 텐데, FastAPI는 직관적입니다.


4. 실행 및 테스트

이제 서버를 켜봅시다. 터미널에 다음 명령어를 입력하세요.

Bash
 
python -m uvicorn main:app --reload

서버가 켜졌다면 인터넷 창을 열고 주소창에 이렇게 쳐보세요. http://127.0.0.1:8000/news?query=파이썬

[결과 화면] 화면에 아래처럼 데이터가 뜬다면 성공입니다!

JSON
 
{
  "keyword": "파이썬",
  "articles": [
    {"title": "파이썬 개발자 연봉 상승...", "link": "http://..."},
    {"title": "AI 시대의 필수 언어 파이썬...", "link": "http://..."}
  ]
}

5. 마치며 (Swagger UI 꿀팁)

FastAPI의 가장 큰 장점! 주소창 뒤에 /docs를 붙여보세요. http://127.0.0.1:8000/docs

우리가 코드를 짜자마자 **"자동으로 만들어진 API 사용 설명서"**가 뜹니다. 여기서 버튼 하나로 바로 테스트도 해볼 수 있습니다. 진짜 편하죠?

다음 편 예고: 데이터는 가져왔는데, 검은 글씨(JSON)만 보니 재미없죠? 다음 시간에는 **'Streamlit(스트림릿)'**을 사용해서, 이 데이터를 예쁜 웹사이트 화면으로 보여주는 방법을 소개하겠습니다.

반응형