본문 바로가기
AI를 이용한 프로그램 만들기

네이버 뉴스 헤드라인 읽어와서 저장하기 (AI + 파이썬)

by 쌩양파 2025. 5. 12.

안녕하세요.

오늘도 비전공자의 막무가네 AI를 이용한 파이썬 실험입니다.

 

 

실험 환경

  • 사용한 Ai model : Gemini 2.0 
  • 사용한 프로그램 : Python 

나의 질문 (to AI) :

네이버 뉴스 경제 섹션(https://news.naver.com/section/101)의헤드라인 제목을 추출하여 13개를 'C:\Data\PY\Blog' 폴더에 'news.txt' 파일로 저장하는 파이썬 코드를 작성해주세요. 파일이 이미 존재하면 내용을 덮어쓰고, 폴더가 없으면 새로 생성해야 합니다.

 

AI 답변 : 

 

알겠습니다. 네이버 뉴스 경제 섹션의 헤드라인 13개를 추출하여 지정된 폴더에 저장하는 파이썬 코드를 작성해 드리겠습니다.

Python
 
import requests
from bs4 import BeautifulSoup
import os

# 저장할 폴더 경로
folder_path = "C:\\Data\\PY\\Blog"
# 저장할 파일 경로
file_path = os.path.join(folder_path, "news.txt")
# 뉴스 섹션 URL
url = "https://news.naver.com/section/101"
# 추출할 헤드라인 개수
num_headlines = 13

try:
    # 폴더가 없으면 생성
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
        print(f"'{folder_path}' 폴더를 생성했습니다.")

    # HTTP GET 요청
    response = requests.get(url)
    response.raise_for_status()  # 요청 실패 시 예외 발생

    # BeautifulSoup 객체 생성
    soup = BeautifulSoup(response.text, 'html.parser')

    # 헤드라인 추출
    headline_elements = soup.select('.sh_text_headline')
    headlines = [headline.text.strip() for headline in headline_elements[:num_headlines]]

    # 파일에 헤드라인 저장 (덮어쓰기 모드)
    with open(file_path, 'w', encoding='utf-8') as f:
        for headline in headlines:
            f.write(headline + '\n')

    print(f"네이버 뉴스 경제 섹션 헤드라인 {len(headlines)}개를 '{file_path}' 파일에 저장했습니다.")

except requests.exceptions.RequestException as e:
    print(f"HTTP 요청 오류: {e}")
except Exception as e:
    print(f"오류 발생: {e}")

 

 

실행결과 : 

실행결과

 

역시나 한방에 안됨. AI에게 추가로 더 물어봤더니, 크롬 화면에서, F12 를 누르면, Web의 source code를 볼수 있다고 알려줘서, 드러가 봄.. 네이버 헤드리인 뉴스의 첫번째 주제가 셀트리온 어쩌구 저쩌구 여서, source code에서 셀트리온으로 검색해서, 내가 추출하고자 하는 위치의 코드 형태를 대충 카피(source code에서 마우스 오른쪽 클릭후 copy element) 함.... <strong class  어쩌구 저쩌구...>

 

 

나의 질문 (to AI) :

내가 추출하려고 하는 제목의 코드가 <strong class="sa_text_strong">셀트리온 “美 약가인하 행정명령, 바이오시밀러엔 직접 영향 어려울 것”</strong> 로 되어 있네, 참고해서 코드 다시 작성해줘. 그리고, 웹 화면을 끄지 말고 멈춰줘.
 
 

AI 답변 :

 
Python
 
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time  # time 모듈 추가

naver_news_url = "https://news.naver.com/section/101"
output_directory = r"C:\Data\PY\Blog"
output_filename = "news.txt"
output_path = os.path.join(output_directory, output_filename)
num_headlines_to_extract = 13

def extract_naver_strong_headlines_and_save(url, output_file, num_headlines):
    """
    네이버 뉴스 섹션에서 <strong class="sa_text_strong"> 태그 내의 헤드라인 제목을 지정된 개수만큼 추출하여 파일에 저장하고, 웹 화면을 멈춥니다.

    Args:
        url (str): 네이버 뉴스 섹션 URL
        output_file (str): 저장할 파일 경로
        num_headlines (int): 추출할 헤드라인 개수
    """
    driver = webdriver.Chrome()
    try:
        driver.get(url)
        headline_elements = WebDriverWait(driver, 10).until(
            EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'strong.sa_text_strong'))
        )

        os.makedirs(os.path.dirname(output_file), exist_ok=True)

        with open(output_file, "w", encoding="utf-8") as f:
            for i, headline in enumerate(headline_elements[:num_headlines], 1):
                headline_text = headline.text
                if headline_text:
                    f.write(f"{i}] {headline_text}\n")
            print(f"<{url}> <strong class='sa_text_strong'> 태그 내 헤드라인 제목 상위 {num_headlines}개를 '{output_file}'에 저장했습니다.")

        print("웹 화면을 닫지 않고 멈춥니다. 확인 후 아무 키나 누르세요...")
        input()  # 사용자 입력 대기

    except Exception as e:
        print(f"<{url}> <strong class='sa_text_strong'> 태그 내 헤드라인 제목 추출 중 오류 발생: {e}")
    finally:
        # 오류가 발생해도 웹 드라이버를 닫지 않도록 이 부분을 try 블록 밖으로 이동했습니다.
        # 사용자가 확인 후 명시적으로 닫도록 유도합니다.
        pass

    if 'driver' in locals() and driver.service.is_running: # driver 객체가 생성되었고, 서비스가 실행 중인지 확인
        driver.quit()
        print("웹 드라이버를 종료했습니다.")


if __name__ == "__main__":
    print(f"네이버 뉴스 <strong class='sa_text_strong'> 태그 내 헤드라인 제목 상위 {num_headlines_to_extract}개를 '{output_path}'에 저장하고, 웹 화면을 멈춥니다. (기존 파일 내용 삭제)")
    extract_naver_strong_headlines_and_save(naver_news_url, output_path, num_headlines_to_extract)

변경된 부분:

  1. CSS 선택자 유지: 이전 답변과 동일하게 WebDriverWait에서 사용하는 CSS 선택자는 strong.sa_text_strong으로 유지했습니다.
  2. 웹 화면 멈춤:
    • time 모듈을 import 했습니다. (현재는 직접적인 시간 지연보다는 사용자 입력을 대기하는 방식으로 구현했습니다.)
    • 헤드라인 추출 및 저장이 완료된 후 print("웹 화면을 닫지 않고 멈춥니다. 확인 후 아무 키나 누르세요...") 메시지를 출력합니다.
    • input() 함수를 호출하여 사용자가 아무 키나 입력할 때까지 프로그램 실행을 멈춥니다. 이 상태에서 웹 브라우저 화면을 확인할 수 있습니다.
  3. 드라이버 종료 시점 변경:
    • finally 블록에서 driver.quit()을 제거했습니다. 이렇게 하면 예외가 발생하더라도 웹 드라이버가 바로 닫히지 않습니다.
    • if 'driver' in locals() and driver.service.is_running: 조건을 사용하여 driver 객체가 생성되었고, Selenium 서비스가 아직 실행 중인지 확인한 후 driver.quit()을 호출하도록 if __name__ == "__main__": 블록의 마지막에 추가했습니다. 이는 사용자가 input()을 통해 확인 후 아무 키나 눌러 프로그램이 계속 진행될 때 웹 드라이버를 종료하기 위함입니다.

이제 코드를 실행하면 헤드라인을 추출하여 저장한 후 웹 브라우저 화면이 그대로 유지되며, 터미널에 출력된 메시지를 확인하고 아무 키나 누르면 웹 드라이버가 종료됩니다.

 
 
실행결과, 앗..뭔가 저장 되었다.
 
파일을 열어보니...(news.txt에 저장된 내용들..)

 

1] 이사회 개편 요구에 “부당하다” 정면 반박...한국콜마, 남매 갈등 깊어지나
2] 올해 5대 은행 금융사고 피해액 857억 원 넘어
3] OECD도 한국 잠재성장률 1%대 전망…10년새 1%p ‘뚝’
4] 강남 열기, 성동·광진·동작으로 확산…경매 낙찰률 100% 웃돌아
5] 셀트리온, 1천억원 규모 자사주 소각
6] '위기의 백종원' 급기야…'반값 할인' 특단의 카드
7] 산업부, 670억원 투칩해 ‘팹리스 첨단장비 지원센터’ 구축
8] "불장 왔나"…가상자산 관련주도 '날개'
9] 저궤도 위성통신에 세계가 주목… 한국은 ‘걸음마 단계’
10] "특별하게 모십니다" 불꽃 튀는 압구정 수주전
11] 실손 지난해 1.6조 적자… 영양제주사·도수치료에만 5조 원 지급
12] [서울데이터랩]한화에어로스페이스 4.33% 하락 주도
13] 본업·신사업 다 잘했는데도…해킹 사태에 울상인 SK텔레콤

 

 

네이버 뉴스(경제) 의 헤드라인이  잘 저장되었다.... 좋았어~^^
이걸로 뭘할까?