파이썬을 활용한 '키워드 수집 → 뉴스 검색 → 본문 추출 과정'

파이썬을 활용한 '키워드 수집 → 뉴스 검색 → 본문 추출 과정'

파이썬을 활용해 "키워드 수집 → 뉴스 검색 → 본문 추출"로 이어지는 데이터 수집 자동화 과정을 단계별 코드 예시와 함께 설명해 드릴게요.


1. 파이썬 환경 및 라이브러리 준비

먼저 데이터를 수집하고 API를 다루기 위해 필요한 도구들을 설치해야 합니다.

Bash
pip install requests beautifulsoup4 pandas

2. API를 활용한 키워드 수집 (구글 트렌드 예시)

네이버 API는 승인이 필요하므로, 여기서는 라이브러리를 통해 접근 가능한 Google Trends 방식으로 키워드를 가져오는 흐름을 보여드립니다.

Python
import requests
from bs4 import BeautifulSoup
defget_realtime_keywords():
 # 구글 트렌드 RSS 피드 등을 활용해 급상승 키워드를 가져오는 로직 (예시)
 url = "https://trends.google.com/trends/trendingsearches/daily/rss?geo=KR"
 response = requests.get(url)
 soup = BeautifulSoup(response.content, "xml")
 keywords = [item.title.get_text() for item in soup.find_all("item")]
 return keywords[:5] # 상위 5개 키워드 반환
print(get_realtime_keywords())

3. 뉴스 데이터 수집 (네이버 뉴스 검색 API 활용)

가장 핵심적인 부분입니다. 네이버 개발자 센터에서 발급받은 Client IDSecret을 사용합니다.

Python
import os
import requests
defsearch_news(query):
 client_id = "YOUR_CLIENT_ID"
 client_secret = "YOUR_CLIENT_SECRET"
 # 네이버 뉴스 검색 API 엔드포인트
 url = f"https://openapi.naver.com/v1/search/news.json?query={query}&display=3&sort=sim"
 headers = {
 "X-Naver-Client-Id": client_id,
 "X-Naver-Client-Secret": client_secret
 }
 response = requests.get(url, headers=headers)
 if response.status_code == 200:
 return response.json()['items'] # 뉴스 제목, 링크, 요약 정보 반환
 else:
 print("Error Code:" + str(response.status_code))
 returnNone
# '비트코인' 관련 최신 뉴스 3개 가져오기
news_list = search_news("비트코인")

4. 뉴스 본문 크롤링 (BeautifulSoup 활용)

API가 제공하는 것은 '요약'일 뿐입니다. AI가 풍부한 내용을 쓰게 하려면 원문 링크에 접속해 본문을 긁어와야 합니다.

Python
defget_news_content(url):
 try:
 headers = {"User-Agent": "Mozilla/5.0"}
 res = requests.get(url, headers=headers)
 soup = BeautifulSoup(res.text, "html.parser")
 # 일반적인 뉴스 사이트의 본문 태그를 찾아 추출 (사이트마다 다를 수 있음)
 # 예: <article> 혹은 class가 'article_view'인 부분
 content = soup.find('article') or soup.find('div', class_='article_body')
 return content.get_text(strip=True) if content else"본문을 찾을 수 없습니다."
 except:
 return"접근 제한된 사이트입니다."
# 첫 번째 뉴스 기사의 본문 가져오기
if news_list:
 full_text = get_news_content(news_list[0]['link'])
 print(full_text[:200]) # 앞부분 200자만 출력

5. 요약 및 다음 단계 연동

이렇게 수집된 full_text를 이제 OpenAI GPT API로 넘겨주면 됩니다.

  1. Input: 수집된 뉴스 본문 + 키워드

  2. Prompt: "위 뉴스 내용을 바탕으로 블로그 포스팅을 작성해줘. 말투는 친근하게 해주고 관련 해시태그도 5개 뽑아줘."

  3. Output: AI가 작성한 블로그 글 완성

구현 시 주의사항

  • Rate Limit: API는 호출 횟수 제한이 있습니다. 너무 빠르게 요청하면 차단될 수 있으니 time.sleep(1) 등을 사용해 간격을 두세요.

  • robots.txt: 크롤링 전 해당 사이트가 자동 수집을 허용하는지 확인해야 합니다. (네이버 뉴스 API를 통해 제공되는 링크는 대부분 요약본 활용을 권장합니다.)

이 코드를 하나의 파일로 합쳐 for문을 돌리면, 1분 안에 수십 개의 뉴스 본문을 수집하는 자동화 파이프라인의 기초가 완성됩니다! 혹시 특정 단계(예: GPT 연동 코드)가 더 궁금하신가요?


직원 두 명을 AI로 고용하기 프로젝트, 프롬프트 하나로 2단계 반자동 소싱 시스템 만들기

직원 두 명을 AI로 고용하기 프로젝트,  프롬프트 하나로 2단계 반자동 소싱 시스템 만들기

다음은 이 글을 보고 “바로 2단계 반자동까지 구현해보자”는 흐름으로 가려면, 구조를 개념 → 설계 → 구현 예시 → 체크리스트 순으로 잡고 시작합니다.

직원 두 명을 AI로 고용하기 프로젝트,  프롬프트 하나로 2단계 반자동 소싱 시스템 만들기

이 글의 구조는 아래와 같습니다.


1. 왜 완전 자동보다 반자동이 먼저인가

처음부터 “완전 자동”을 노리면, 실제 운영에서는 생각보다 빨리 벽을 만납니다. 특히 이커머스 쪽은 정책 위반, 잘못된 상품 정보, 가격 오류 등이 한 번 사고 나면 바로 계정·브랜드에 타격이 들어옵니다.

완전 자동의 대표적인 리스크는 세 가지 정도로 정리할 수 있습니다.

  • 정책 위반·잘못된 상품 등록 위험
    • AI가 만든 설명/번역·카테고리가 마켓 정책과 어긋나면, 판매 중지·패널티로 이어질 수 있습니다.
  • 디버깅 난이도
    • “어느 단계에서 잘못됐는지”를 찾기 어렵기 때문에, 문제가 생기면 전체 자동화를 멈춰야 할 때가 많습니다.
  • 데이터 품질 문제
    • 초기에는 소스 데이터·룰이 덜 정제되어 있기 때문에, 자동으로 돌릴수록 “엉뚱한 결과를 크게 키워버리는” 경우가 생깁니다.

반대로, 반자동으로 시작하면 얻는 장점이 분명합니다.

  • 기존 업무 플로우를 크게 바꾸지 않는다.
    • 여전히 엑셀/CSV, 기존 대량 등록 도구를 쓰면서, 중간 몇 단계를 AI로 치환하는 수준입니다.
  • 중요한 결정은 사람이 쥐고 있다.
    • “마지막으로 올릴 상품을 고르는 일”은 사람이 하기 때문에, 사고가 나도 범위가 제한적입니다.
  • 실패해도 회복이 쉽다.
    • GPT/스크립트가 만들어낸 중간 결과가 마음에 안 들면, 그냥 그 회차 파일만 버리면 되고, 기존 방식으로 다시 하면 됩니다.

그래서 이 글의 목표는 거창하지 않습니다.

“오늘 저녁에라도 써볼 수 있는, GPT 프롬프트 + CSV + 간단 스크립트 기반의 반자동 구조 하나 만들기.”

완전 자동은 그다음 단계의 이야기로 남겨 두고, 먼저 2단계 반자동을 돌려보면서 룰과 데이터를 다듬는 것이 현실적인 순서입니다.


2. 우리가 이미 갖고 있는 것: GPT 프롬프트 + CSV

2편까지 따라왔다면, 사실 반자동에 필요한 재료는 거의 다 갖고 있습니다.

  • 재사용 가능한 GPT 프롬프트 템플릿
    • 입력: 카테고리, 키워드, 가격대, 리뷰 수, 평점, 제외 키워드/브랜드
    • 출력: CSV 형식의 상품 리스트
  • 기본 CSV 구조
    • 최소형: 상품명,URL
    • 확장형: 상품명,URL,가격,평점,리뷰수

블로그에서는 여기서 실제 CSV 한 덩어리를 예시로 보여주면 좋습니다. 예를 들어:

상품명,URL,가격,평점,리뷰수
Example Cordless Vacuum A,https://www.amazon.com/dp/AAAAAAA,199.99,4.5,1234
Example Cordless Vacuum B,https://www.amazon.com/dp/BBBBBBB,149.00,4.3,845
Example Cordless Vacuum C,https://www.amazon.com/dp/CCCCCCC,219.50,4.6,532

이때 강조하고 싶은 메시지는 딱 하나입니다.

“GPT가 내보내는 이 CSV 한 파일이, 앞으로 우리가 만들 반자동 시스템의 입력 표준(Input Schema)이 된다.”

입력이 표준화되어 있으면,

  • 중간에 낀 스크립트/툴을 갈아끼우기 쉽고
  • 나중에 완전 자동으로 갈 때도 API·에이전트가 이 포맷만 맞춰서 읽으면 되기 때문에
  • 전체 시스템이 훨씬 단순해집니다.

3. 반자동 구조 전체 그림: 사람과 에이전트의 역할 분리

이제 2단계 반자동 구조를 한 문장으로 정리해 봅니다.

“GPT는 후보를 모으고, 미니 에이전트(스크립트)는 1차 필터와 계산을 해주고, 사람은 마지막으로 올릴 상품만 고른다.”

조금 더 구체적으로 나누면 역할은 이렇게 됩니다.

  • GPT 봇
    • 프롬프트를 받아 후보 URL CSV를 만든다.
  • 미니 에이전트(스크립트/툴)
    • gpt_sourcing.csv를 읽는다.
    • 중복·금지 키워드·기본 마진 기준으로 1차 필터링.
    • 환율·마진율을 고려해 예상 판매가 계산.
    • 사람이 보기 편한 형태의 candidate_for_upload.csv를 생성.
  • 사람
    • candidate_for_upload.csv를 열어 필터를 돌려 보고, 이상한 상품을 제외.
    • “이건 올리자” 싶은 상품만 남긴 final_upload.csv를 만든다.
    • 기존에 쓰던 “대량 등록 프로그램/마켓 양식”에 final_upload.csv를 넣어 배치 업로드.

이 섹션에서는 코드를 깊게 파고들기보다, “누가 언제 무엇을 눌러야 하는지”를 중심으로 설명해 주는 게 좋습니다.

예를 들어, 하루 작업 플로우를 이렇게 써볼 수 있습니다.

  1. 오전 10시 – GPT 봇에 프롬프트 입력 → gpt_sourcing.csv 받기
  2. 오전 10시 10분 – 미니 에이전트 스크립트 실행 → candidate_for_upload.csv 생성
  3. 오전 10시 15분 – 파일을 엑셀로 열어 필터링/정렬로 최종 후보만 남기기
  4. 오전 10시 30분 – final_upload.csv로 저장 후, 마켓 대량 등록 양식에 업로드

즉, 사람이 하는 일은 “맨 앞 GPT 프롬프트 한 번 + 맨 끝 최종 승인 한 번”으로 줄어드는 대신, 중간의 반복적인 필터링·계산 작업은 스크립트가 눌러주는 구조입니다.


4. 단계별 구현 ① – GPT 봇으로 후보 리스트 받기

이제 실제로 반자동 구조를 만들기 위한 첫 단계, 후보 리스트 받기를 정리해 보겠습니다.

4-1. 프롬프트 템플릿 다시 한 번

우리가 사용할 프롬프트는 2편에서 만든 템플릿의 “간단 버전”입니다. 예를 들어:

너는 아마존 상품 소싱을 위한 리서처다.

목표:
아래 조건에 맞는 상품을 아마존에서 찾아,
상품 30개의 리스트를 만들어라.

검색 조건:
- 마켓: amazon.com 기준으로 생각한다.
- 카테고리: [카테고리명]
- 핵심 키워드: [키워드1], [키워드2]
- 가격대: [최소 가격] ~ [최대 가격] 달러
- 최소 리뷰 수: [리뷰 수]개 이상
- 최소 평점: [평점]점 이상
- 제외 브랜드: [브랜드1], [브랜드2]
- 제외 키워드: [키워드1], [키워드2]

출력 형식:
- 설명 없이 CSV 형식으로만 출력해라.
- 첫 줄에는 "상품명,URL,가격,평점,리뷰수" 헤더를 넣어라.
- 각 줄에는 다섯 개 값을 쉼표(,)로 구분해 넣어라.
- 예시:
  상품명,URL,가격,평점,리뷰수
  Example Product,https://www.amazon.com/dp/xxxxxxx,199.99,4.5,1234

지금부터 결과만 출력해라.

실제 사용할 때는 대괄호 부분만 바꿔 쓰면 됩니다.

  • 오늘은: 카테고리 = “cordless vacuum”, 키워드 = “cordless vacuum, stick vacuum”
  • 내일은: 카테고리 = “monitor arm”, 키워드 = “monitor arm, desk mount”

이렇게 카테고리와 키워드만 바꿔 돌려도, 매번 같은 형식의 CSV를 안정적으로 받는 게 핵심입니다.

4-2. 실제 사용 시나리오 예시

글에서는 한 번쯤 이런 식으로 시나리오를 써주면 좋습니다.

  • “월요일에는 무선 청소기, 화요일에는 모니터 암, 수요일에는 게이밍 체어…”
  • 매일 아침 10시에 프롬프트에 카테고리·가격대를 바꿔 넣고 한 번씩만 돌린다.
  • GPT가 내놓은 CSV를 그대로 저장해서 gpt_sourcing.csv로 쓴다.

여기서 중요한 포인트는:

“GPT와의 대화는 매번 다르지만, 결과 파일 형식은 항상 같다.”

라는 걸 강조하는 것입니다. 그래야 뒤에 붙는 스크립트/툴이 흔들리지 않습니다.

4-3. GPT 결과를 CSV로 저장하는 방법

기술에 익숙하지 않은 독자를 위해, “GPT 결과 → 엑셀/구글 시트 → CSV 저장”을 아주 간단히 짚고 넘어가면 좋습니다.

  • 엑셀 기준:

  • GPT가 출력한 내용을 통째로 복사

  • 엑셀 새 시트에 A1 셀부터 붙여넣기
  • 메뉴에서 파일 → 다른 이름으로 저장 → 파일 형식 ‘CSV UTF-8(쉼표로 분리)’ 선택 → 저장
  • 구글 시트 기준:

  • 새 스프레드시트에 붙여넣기

  • 파일 → 다운로드 → CSV(쉼표로 구분) 선택

이렇게 저장한 파일 이름을 gpt_sourcing.csv로 맞추면, 다음 단계의 미니 에이전트 스크립트가 매번 같은 파일 이름으로 읽어올 수 있어서 편합니다.

4-4. 이 단계까지 끝나면 갖게 되는 것

여기까지가 1단계입니다. 이 단계가 끝나면, 폴더 안에는 이런 상태가 됩니다.

  • gpt_sourcing.csv
    • 헤더: 상품명,URL,가격,평점,리뷰수
    • 내용: 오늘 소싱할 후보 30개~100개 정도

즉, “사람이 직접 아마존을 뒤져서 엑셀에 적어 넣던 작업”이 “GPT 프롬프트 한 번 + 복붙 + CSV 저장”으로 바뀐 것입니다.

이제 다음 단계에서는, 이 gpt_sourcing.csv를 읽어서 중복/금지 키워드/마진 기준으로 1차 필터링하고, 사람이 보기 편한 후보 리스트로 바꿔주는 미니 에이전트(스크립트)를 얹으면, 2단계 반자동 구조가 완성됩니다.

원하시면 바로 이어서 “5. 단계별 구현 ② – 스크립트로 반자동 필터·계산 레이어 만들기”를 전체 원고처럼 한 번에 정리해 드릴까요?


5. 단계별 구현 ② – 반자동 필터링/계산 레이어 만들기

이 부분이 “반자동 구현의 핵심”입니다. 툴 종류에 따라 예시를 나눌 수 있습니다. (엑셀·구글 시트 vs 간단 스크립트)

5-1. 엑셀/구글 시트로 구현하는 경우

  • 시트 구조 예시:
    • A열: 상품명
    • B열: URL
    • C열: 원화 환산 가격(수식으로 계산)
    • D열: 예상 마진율
    • E열: 필터 결과(예: “OK/제외”)
    • F열: 최종 등록 여부(체크박스)
  • 수식 예:
    • 달러 → 원화 환산
    • 마진율 계산
    • 특정 키워드가 상품명에 있으면 “제외” 표시
  • 사람이 하는 일:
    • 필터/정렬로 “마진율 낮은 상품, 키워드 포함 상품” 한 번 훑기
    • F열 체크박스로 “등록할 상품”만 TRUE로 만들기

5-2. 간단 스크립트(파이썬 등)로 구현하는 경우

  • 입력: gpt_sourcing.csv
  • 처리:
    • 중복 URL 제거
    • 금지 키워드 포함 상품 필터링
    • 가격·마진 계산
    • 결과에 “추천/주의/제외” 플래그 달기
  • 출력: candidate_for_upload.csv
    • 여기에는 사람이 볼 컬럼만 넣기(상품명, URL, 계산된 판매가, 플래그 등)

이 섹션에서는 “코드 전체”보다는, 입력·출력 구조와 필터링 로직을 개념 위주로 설명하는 게 좋습니다. 

스크립트 기준으로 구현하는 5번 파트부터 본문처럼 살을 붙여 보겠습니다. (언어는 “파이썬 + 하루 한 번 수동 실행/크론”을 전제로 씁니다.)


5. 단계별 구현 ③ – 스크립트로 반자동 필터·계산 레이어 만들기

엑셀/시트로도 어느 정도는 버틸 수 있지만, 소싱 규모가 조금만 커져도 “수동 필터링”이 금방 한계에 옵니다. 이때 제일 가볍게 도입할 수 있는 게 파이썬 스크립트 한 파일입니다.

역할은 단순합니다.

GPT가 만든 gpt_sourcing.csv를 읽어서, 중복·금지 키워드·기본 마진 조건을 1차로 걸러 준 뒤 사람이 검토하기 쉬운 candidate_for_upload.csv로 정리해 주는 작은 에이전트.

5-1. 파일 구조부터 먼저 정한다

먼저, 스크립트가 다룰 파일 이름을 고정해 두는 게 좋습니다.

  • GPT 출력 파일: gpt_sourcing.csv
    • 예: 상품명,URL,가격,평점,리뷰수
  • 스크립트 출력 파일: candidate_for_upload.csv
    • 예: 상품명,URL,원가_원화,예상_판매가,예상_마진율,필터_결과,메모

블로그에서는 이 두 파일의 헤더를 텍스트로 한 번 보여주고, “오늘 우리가 하는 일은 이 입력을 이 출력으로 바꾸는 아주 작은 봇 하나 만드는 것”이라고 잡아 주면 독자가 전체 구조를 쉽게 이해합니다.

5-2. 스크립트가 할 일 정의하기

스크립트의 로직은 대략 이렇게 설계합니다.

  1. gpt_sourcing.csv 읽기
  2. 각 행에 대해:
    • URL 기준으로 중복 제거
    • 금지 키워드(제외 키워드) 체크
    • 원화 기준 원가·판매가·마진율 계산
    • 기준에 못 미치면 “제외” 플래그 달기
  3. 결과를 candidate_for_upload.csv로 저장

블로그에서는 “완전한 파이썬 강의”까지는 필요 없고, “이 정도 스크립트 하나면 반자동이 된다”는 수준의 예시를 보여주는 게 핵심입니다.

5-3. 예시 스크립트 구조(설명용)

아래는 개념을 보여주기 위한 의사코드/예시에 가깝게 작성하면 좋습니다.

import csv

INPUT_FILE = "gpt_sourcing.csv"
OUTPUT_FILE = "candidate_for_upload.csv"

# 환경/설정 값
EXCHANGE_RATE = 1350      # 1달러 → 1,350원
TARGET_MARGIN = 0.3       # 목표 마진율 30%
MARKET_FEE = 0.12         # 마켓 수수료 12%
EXTRA_COST = 0.05         # 기타 비용 5%
EXCLUDE_KEYWORDS = ["adult", "sex", "weapon"]
EXCLUDE_BRANDS = ["Dyson"]  # 필요시 상품명에서 브랜드 필터링

def has_excluded_word(name: str) -> bool:
    lowered = name.lower()
    return any(word in lowered for word in EXCLUDE_KEYWORDS)

def estimate_prices(usd_price: float) -> tuple[float, float, float]:
    # 아주 단순화한 예시: 달러 가격 하나만 기준으로 계산
    base_cost_krw = usd_price * EXCHANGE_RATE
    total_cost = base_cost_krw * (1 + MARKET_FEE + EXTRA_COST)
    # 목표 마진율을 맞추는 판매가 역산
    sale_price = total_cost / (1 - TARGET_MARGIN)
    margin = (sale_price - total_cost) / sale_price
    return base_cost_krw, sale_price, margin

def main():
    seen_urls = set()
    rows_out = []

    with open(INPUT_FILE, newline="", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            name = row["상품명"]
            url = row["URL"]
            price_str = row.get("가격", "").replace(",", "").strip()

            # 1) URL 중복 제거
            if url in seen_urls:
                continue
            seen_urls.add(url)

            # 2) 금지 키워드 필터
            if has_excluded_word(name):
                result = "제외_키워드"
                memo = "금지 키워드 포함"
            else:
                result = "검토필요"
                memo = ""

            # 3) 가격/마진 계산
            try:
                usd_price = float(price_str) if price_str else 0.0
            except ValueError:
                usd_price = 0.0

            cost_krw, sale_price, margin = estimate_prices(usd_price) if usd_price > 0 else (0, 0, 0)

            rows_out.append({
                "상품명": name,
                "URL": url,
                "원가_원화": round(cost_krw),
                "예상_판매가": round(sale_price, -1),  # 10원 단위 반올림 예시
                "예상_마진율": round(margin * 100, 1),
                "필터_결과": result,
                "메모": memo,
            })

    fieldnames = ["상품명", "URL", "원가_원화", "예상_판매가", "예상_마진율", "필터_결과", "메모"]
    with open(OUTPUT_FILE, "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(rows_out)

if __name__ == "__main__":
    main()

블로그에서는 이 코드 전체를 그대로 붙이기보다는:

  • 상단 설정 값(EXCHANGE_RATE, TARGET_MARGIN 등)만 따로 강조하고
  • “여기를 본인 숫자에 맞게 바꾸면 된다”는 설명을 달아주면 좋습니다.

또, 파이썬에 익숙하지 않은 독자를 위해:

  • INPUT_FILE는 GPT에서 받은 CSV 파일 이름
  • OUTPUT_FILE는 사람이 열어볼 후보 리스트 파일 이름
  • 필터_결과검토필요인 것만 골라서 최종 업로드 대상으로 쓴다

이 정도만 풀어서 설명해 주면 충분합니다.

5-4. 이 스크립트가 만들어 주는 “반자동 경험”

이 구조까지 구현해 놓으면, 하루 작업 흐름이 이렇게 바뀝니다.

  1. GPT 프롬프트로 gpt_sourcing.csv 받기
  2. 파이썬 스크립트 한 번 실행 → candidate_for_upload.csv 자동 생성
  3. candidate_for_upload.csv를 엑셀/시트에서 열어
    • 필터_결과 != "제외_키워드"
    • 예상_마진율이 너무 낮은 상품 제외
  4. 남은 행만 가지고 마켓 대량 업로드 양식에 맞게 복사/붙여넣기

완전 자동까지는 아니지만, “후보 수집 + 1차 필터 + 가격 계산”이라는 가장 귀찮은 부분은 이미 AI+스크립트에게 넘긴 셈입니다. 사람은 그 결과를 보고 “마지막 승인만 하는 역할”로 내려앉습니다.


이 5번(스크립트 기준 구현) 섹션을 이런 식으로 본문에 넣으면, 독자가 “아, 나도 GPT CSV + 파이썬 파일 하나로 반자동까지는 금방 만들겠다”는 느낌을 받기 좋습니다.

혹시 여기서 더 보고 싶은 건:

  • 마켓별 업로드 양식에 맞춰 컬럼을 리매핑하는 예시
  • 이 스크립트를 매일 한 번 자동 실행하는 crontab 예시

둘 중 어떤 쪽을 먼저 풀어보면 도움이 될까요?