본문 바로가기
개발 언어/python

구글 뉴스 기사 수집 엑셀 정리 - RSS 구조 feedparser 라이브러리 활용

by QA Engineer 2025. 6. 1.

구글 뉴스 기사 수집 엑셀 정리 - RSS 구조 feedparser 라이브러리 활용

뉴스 사이트에서 RSS를 이용하여 카테고리의 기사 내용을 읽은 후 feedparser로 기사 제목, 링크, 게시 날짜를 구분하여 엑셀 파일에 저장하는 python 코드를 작성한다. RSS란? Rich Site Summary의 약자로 콘텐츠의 표현 방식 중 하나이다. 콘텐츠를 표현하는 방식이기 때문에 뉴스 사이트나 블로그와 같이 가공된 콘텐츠를 제공하는 사이트에서 RSS 방식으로 데이터를 제공한다. RSS는 표현방식으로서 하나의 약속이기 때문에 정해진 규격이 있다.

RSS의 예시

<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0">

 <channel>

 <title>사이트 제목</title>

 <link> 사이트 주소</link>

 <description>사이트 설명</description>

 

 <item>

   <title>콘텐츠 1 제목</title>

   <link> 콘텐츠 1 주소</link>

   <description>콘텐츠 내용 전체 또는 일부</description>

   <pubDate>시간</pubDate>

   <guid>콘텐츠 1 고유 ID</guid>

  </item>

 </channel>

</rss>

 

xml을 데이터를 표현할때 <키>값</키> 형태로 표현을 한다. 그래서 RSS의 정형화된 데이터 구조를 사용해서 원하는 정보를 크롤링해서 자료를 만들 수 있다.

feedparser 라이브러리 소개

feedparser은 RSS 주소를 입력하면 파이썬 자료형인 딕셔너리 자료형처럼 사용할 수 있도록 RSS를 분석해준다. quote 함수: URL에 있는 한글을 표현하기 위해 필요한 라이브러리이다. 인터넷 주소에 한글이 포함되어 있으면 보통은 인식할 수 없기 때문에 한글을 인식할 수 있는 다른 코드로 변환해야 한다. quote 라이브러리를 사용하면 한글을 URL Encoding을 통해 아스키 코드로 변환을 해준다.

feedparser 예시

feedparser.parse({RSS 주소}): RSS 주소의 내용을 분석해서 딕셔너리 자료형으로 반환한다.

Google 뉴스 사이트에스 월드, 비즈니스 카테고리의 뉴스 게시물 중 제목, 링크, 출간 일자를 엑셀 파일에 다운로드하는 예제

원래 Google 뉴스 사이트에서 RSS url에서 한글로 작성된 내용을 quote 함수를 사용해서 아스키 코드로 인코딩하려고 했지만, Google URL 자체에 한국어가 없고 자동으로 인코딩 된 url로 표기해주고 있어서 별도로 사용하지 않았다.

import feedparser
from urllib.parse import quote
from openpyxl import Workbook
import ssl

world_rss = base_rss_url + "topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx1YlY4U0FtdHZHZ0pMVWlnQVAB?hl=ko&gl=KR&ceid=KR%3Ako"
business_rss = base_rss_url + "topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtdHZHZ0pMVWlnQVAB?hl=ko&gl=KR&ceid=KR%3Ako"

xlsx = Workbook()
world_sheet = xlsx.create_sheet("World")
world_sheet.append(["title", "link", "published"])

ssl._create_default_https_context = ssl._create_unverified_context #SSL을 사용하는 주소에 접근하기 위한 handshake 과정
news_list = feedparser.parse(world_rss)
for news in news_list['items']:
world_sheet.append([news["title"], news["link"], news["published"]])

business_sheet = xlsx.create_sheet("Business")
business_sheet.append(["title", "link", "published"])

news_list = feedparser.parse(business_rss)
for news in news_list["items"]:
business_sheet.append([news["title"], news["link"], news["published"]])

file_name = "news_list.xlsx"
xlsx.save(file_name)