유용한 정보

[문과 파이썬 학습] 파이썬으로 기사 자동 요약하기 #1

specify 2024. 10. 20. 19:33
728x90

Financial Times 기사 요약하기 

이번 시간에는 Financial times 기사를 요약하는 코드를 짜 볼 예정이다.

https://www.ft.com/fund-management 기사를 긁어오는 것을 목표로 한다.

이 과정에서 BeautifulSoup으로 할지, Selenium으로 할지 고민이 될 수 있다. 결론부터 말하자면, 로그인된 상태에서 FT 웹사이트의 뉴스 기사를 스크래핑할 때는 Selenium이 가장 적합한 선택이다. BeautifulSoup도 충분히 유용하지만, 로그인 세션과 동적 콘텐츠 처리에 있어서는 Selenium의 편의성이 더 높다.

로그인된 상태에서의 스크래핑(이 경우 Selenium이 유리)

  • 이미 로그인된 상태에서 스크래핑을 한다면, 유료 구독 및 로그인 문제는 발생하지 않음
  • 로그인 세션을 유지한 채로 스크래핑할 수 있어 별도의 쿠키 처리 과정이 필요 없음.
  • 동적 콘텐츠도 스크래핑 가능.

상위 3개 기사를 selenium으로 [본문요약], [본문] 2 문단으로 가져오도록 하는 것을 목표로 해보자.

Selenium 설치 및 설정

Selenium을 사용해 FT 웹사이트에서 상위 3개의 기사를 긁어오려면, 아래의 절차를 따르면 된다.

1. Selenium 설치 및 설정

먼저, 1) Selenium과 2) 웹드라이버(ChromeDriver 또는 다른 브라우저 드라이버)를 설치해야 함.

seenium 설치의 경우 명령프롬포트(윈도우에 CMD 검색 후 엔터)를 시작 후 아래 코드를 입력하면 된다. 

pip install selenium

Selenium 설치 완료 화면

ChromeDriver 설치: ChromeDriver 다운로드

2. 크롬 드라이버 경로 설정

로그인된 세션을 유지하기 위해 쿠키를 처리하거나, 또는 처음부터 로그인 절차를 자동화할 수 있다. 아래는 Selenium을 사용해 FT 웹사이트에서 상위 3개의 기사를 긁어오는 예시 코드다.

크롬 드라이버 경로를 설정해줘야하는데, 경로는 보통 C:/Users/username/Downloads/chromedriver.exe로 될 건데, 직접 찾아봐야하는 수 밖에 없다. 크롬드라이버 우클릭한다음 속성으로 들어가면 아래와 같은 화면이 나오는데, 여기에 '위치'에 해당되는 부분을 사용하면 된다. 이 경우에는 C:\Users\ADMIN_PC\Downloads가 되겠다.

다운로드 받은 크롬드라이버 위치를 확인하면 된다.

2.1 경로 확인 방법

  • Windows: 파일 탐색기에서 ChromeDriver가 있는 폴더로 이동한 후, 상단의 주소 표시줄을 복사하고, 실행 파일 이름까지 포함해 경로를 지정하면 된다.
  • Mac/Linux: 터미널에서 pwd 명령어로 현재 디렉터리 경로를 확인하거나, Finder에서 ChromeDriver 파일의 위치를 마우스 우클릭 후 '정보 가져오기'로 확인 가능하다.

ChromeDriver 경로만 정확하게 설정하면 Selenium을 사용할 수 있다.

3. 코드 예시

셀레니움을 불러오고, 크롬 드라이버 설치 후, 기사 링크들을 추출하는 코드다. 

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# Chrome 웹드라이버 설정 (ChromeDriver의 경로 지정)
driver = webdriver.Chrome(executable_path='C:/Users/ADMIN_PC/Downloads/chromedriver.exe')

# FT 웹사이트 접속
driver.get('https://www.ft.com/fund-management')

# 페이지가 로드될 때까지 잠시 대기
time.sleep(5)

# 상위 3개 기사의 링크를 추출
articles = driver.find_elements(By.CSS_SELECTOR, 'a[data-trackable="heading-link"]')[:3]

# 기사 링크 순회
for article in articles:
    article_link = article.get_attribute('href')
    driver.get(article_link)

    # 페이지가 로드될 때까지 잠시 대기
    time.sleep(3)

    # 기사 제목
    title = driver.find_element(By.TAG_NAME, 'h1').text
    
    # 본문에서 첫 2개 문단 가져오기
    paragraphs = driver.find_elements(By.CSS_SELECTOR, 'div.article__content-body p')[:2]
    body_text = "\n".join([p.text for p in paragraphs])

    # 본문 요약 추출 (설정된 요약 부분이 있으면 가져오기)
    try:
        summary = driver.find_element(By.CSS_SELECTOR, 'div.article__subheadline').text
    except:
        summary = "요약 없음"

    # 결과 출력
    print(f"기사 제목: {title}")
    print(f"[본문 요약]: {summary}")
    print(f"[본문]: {body_text}")
    print("-" * 80)

# 드라이버 종료
driver.quit()

 

728x90