RSS 피드를 활용하여 각종 언론사에서 뉴스 데이터 받기

RSS 피드를 활용하여 각종 언론사에서 뉴스 데이터 받기

2020, Feb 13    
rss_parse

RSS 피드를 활용하여 각종 언론사에서 뉴스 데이터 받기

RSS ?

RSS: Rich Site Summary 또는 Really Simple Syndication. 舊 RDF Site Summary.

RSS는, 어떤 사이트에 새로운 콘텐츠가 올라왔을 때 해당 사이트에 방문하지 않고, RSS서비스를 통해 리더 한 곳에서 그 콘텐츠를 이용하기 위한 방법입니다. 쉽게 생각하면, 여러 언론사 사이트를 모두 방문할 필요 없이 다양한 기사를 네이버뉴스 한 곳에서 볼 수 있는 것과 같다고 보면 됩니다.

RSS 피드는 아래와 같이 XML 기반의 문서 포맷으로 이루어져 있습니다. (조선일보 RSS 예시)

언론사들은 RSS 서비스를 통해 기사의 일부 정보를 제공합니다. 제가 노가다(?)를 통해 최근에도 기사가 올라오고있는 188개의 RSS 주소를 정리하였습니다. 파이썬에서 활용하기 쉽게 피클(pkl)파일로 만들어 두었으니 아래 코드를 따라하시려면 다운받아 주시면 됩니다. (제 마음대로 골라서 빠져있는 언론사도 존재합니다.)

RSS 목록 다운로드

저작권 이슈

언론사는 RSS를 통해 콘텐츠의 일부를 제공하며 RSS 서비스는 일반인이나 관공서 및 기업등의 이용자가 개인 PC 등 한정된 공간 안에서 뉴스 콘텐트를 개인적으로 구독/이용 하는데 그쳐야 한다고 명시하고 있습니다.

일반인이나 관공서 및 기업이 RSS를 통해 구독하고 있는 뉴스 콘텐트를 홈페이지 또는 인트라넷에 노출해 다수의 이용자에게 보여주는 행위와 재(再)RSS서비스를 하는 행위는 콘텐츠의 복제 및 공중송신에 해당하므로 저작권자의 허락을 얻어야 합니다.

RSS 파싱에 필요한 모듈 설치

  • feedparser : RSS를 간단하게 파싱하기 위해 필요한 모듈입니다.
  • requests : Requests is an Apache2 Licensed HTTP library, written in Python, for human beings.
  • goose3 : 기사 본문을 편리하게 파싱가능한 모듈입니다. (Python 3 기준)
In [1]:
import pandas as pd
import feedparser
import requests
from goose3 import Goose
from goose3.text import StopWordsKorean

RSS 리스트 살펴보기

다운 받은 rss_list.pkl을 주피터 노트북과 같은 폴더에 옮긴 뒤 읽어와 내용을 살펴봅시다.

In [2]:
rss_df = pd.read_pickle('rss_list.pkl')
rss_df.head()
Out[2]:
corp name url
34 조선닷컴 [뉴스]오늘의 주요뉴스 http://myhome.chosun.com/rss/www_section_rss.xml
35 조선닷컴 [뉴스]정치 http://www.chosun.com/site/data/rss/politics.xml
36 조선닷컴 [뉴스]국제 http://www.chosun.com/site/data/rss/internatio...
37 조선닷컴 [뉴스]문화 http://www.chosun.com/site/data/rss/culture.xml
38 조선닷컴 [뉴스]사설ㆍ칼럼 http://www.chosun.com/site/data/rss/editorials...

188개의 RSS 피드가 존재합니다.

In [3]:
# 188개의 피드
len(rss_df)
Out[3]:
188

언론사는 19개 입니다.

In [4]:
sources = rss_df.corp.unique()
sources
Out[4]:
array(['조선닷컴', '노컷뉴스', '동아닷컴', '세계일보', '매일경제', '경향닷컴', '한국아이닷컴', '파이낸셜뉴스',
       '헤럴드경제', '데이터넷', '탑라이더', '뉴스포스트', '뉴스데일리', '에버뉴스', '주간포커스', '다음뉴스',
       '구글뉴스', '중부매일', '르몽드 디플로마티크'], dtype=object)
In [5]:
# 19개의 언론사
len(sources)
Out[5]:
19

RSS 파싱 함수

get_data라는 이름으로 RSS url을 입력 받으면 내용을 파싱하는 함수를 만들어 줍니다.

In [6]:
def get_data(url):
    try:
        res = requests.get(url)
        html = res.text
        data = feedparser.parse(html)
        print(data.feed.title)
        return data
    except:
        return None

잘 작동하는지 실험하기 위해 첫번째 RSS를 골라 테스트 해봅니다.

In [7]:
# 조선닷컴, [뉴스]오늘의 주요뉴스
rss_df.iloc[0]
Out[7]:
corp                                                조선닷컴
name                                        [뉴스]오늘의 주요뉴스
url     http://myhome.chosun.com/rss/www_section_rss.xml
Name: 34, dtype: object
In [8]:
url = rss_df.iloc[0].url
parsed_data = get_data(url)
조선닷컴
In [9]:
type(parsed_data)
Out[9]:
feedparser.FeedParserDict

parsed_data에 해당 피드 해당 데이터에 들어 있는 기사 갯수는 다음과 같습니다.

In [10]:
len(parsed_data['entries'])
Out[10]:
63

기사(article) 정보 확인

In [12]:
num_entries = 2 # article 정보 확인을 위해 임의로 번호를 지정했습니다.
article = parsed_data['entries'][num_entries]
article
Out[12]:
{'title': '\'기생충\' 흑백판 26일 개봉… "봉준호 감독이 직접 톤 조절"',
 'title_detail': {'type': 'text/plain',
  'language': None,
  'base': '',
  'value': '\'기생충\' 흑백판 26일 개봉… "봉준호 감독이 직접 톤 조절"'},
 'links': [{'rel': 'alternate',
   'type': 'text/html',
   'href': 'https://news.chosun.com/site/data/html_dir/2020/02/13/2020021301270.html'}],
 'link': 'https://news.chosun.com/site/data/html_dir/2020/02/13/2020021301270.html',
 'summary': '아카데미 4관왕에 오르며 전 세계에서 흥행하고 있는 봉준호 감독의 영화 \'기생충\' 흑백판이 26일 개봉한다.<br><br>13일 CJ엔터테인먼트는 "봉준호 감독과 홍경표 촬영감독이 한 장면, 한 장면씩 콘트라스트(명암 대비)와 톤 조절 작업을 거친 \'기생충\' 흑백판은 컬러와는 또 다른 느낌의 영화를 선보일 것"이라며 포스터와 예고편을 함께 공개했다.<br>...',
 'summary_detail': {'type': 'text/html',
  'language': None,
  'base': '',
  'value': '아카데미 4관왕에 오르며 전 세계에서 흥행하고 있는 봉준호 감독의 영화 \'기생충\' 흑백판이 26일 개봉한다.<br><br>13일 CJ엔터테인먼트는 "봉준호 감독과 홍경표 촬영감독이 한 장면, 한 장면씩 콘트라스트(명암 대비)와 톤 조절 작업을 거친 \'기생충\' 흑백판은 컬러와는 또 다른 느낌의 영화를 선보일 것"이라며 포스터와 예고편을 함께 공개했다.<br>...'},
 'updated': '2020-02-13T09:44:30+09:00',
 'updated_parsed': time.struct_time(tm_year=2020, tm_mon=2, tm_mday=13, tm_hour=0, tm_min=44, tm_sec=30, tm_wday=3, tm_yday=44, tm_isdst=0),
 'authors': [{}],
 'author': '',
 'published': 'Thu, 13 Feb 2020 09:44:30 +0900',
 'published_parsed': time.struct_time(tm_year=2020, tm_mon=2, tm_mday=13, tm_hour=0, tm_min=44, tm_sec=30, tm_wday=3, tm_yday=44, tm_isdst=0)}

article은 위와 같이 딕셔너리 형태로 저장돼 있으며 keys를 확인하면 아래와 같습니다. 아래와 같이 몇가지 key에 대하여 내용을 확인해 보도록 하겠습니다.

In [13]:
article.keys()
Out[13]:
dict_keys(['title', 'title_detail', 'links', 'link', 'summary', 'summary_detail', 'updated', 'updated_parsed', 'authors', 'author', 'published', 'published_parsed'])

제목 확인

In [14]:
article['title']
Out[14]:
'\'기생충\' 흑백판 26일 개봉… "봉준호 감독이 직접 톤 조절"'

기사 링크 확인

In [15]:
article['link']
Out[15]:
'https://news.chosun.com/site/data/html_dir/2020/02/13/2020021301270.html'

기사 요약 확인

In [16]:
article['summary']
Out[16]:
'아카데미 4관왕에 오르며 전 세계에서 흥행하고 있는 봉준호 감독의 영화 \'기생충\' 흑백판이 26일 개봉한다.<br><br>13일 CJ엔터테인먼트는 "봉준호 감독과 홍경표 촬영감독이 한 장면, 한 장면씩 콘트라스트(명암 대비)와 톤 조절 작업을 거친 \'기생충\' 흑백판은 컬러와는 또 다른 느낌의 영화를 선보일 것"이라며 포스터와 예고편을 함께 공개했다.<br>...'

다른 key에 대한 내용은 직접 확인해 보시면 됩니다. 보통 언론사들은 RSS에서 기사 정보의 일부를 제공하기 때문에 기사 본문 내용을 제공하지 않는 경우가 많습니다. 기사 본문을 파싱은 아래와 같이 goose3 모듈을 활용하여 가능합니다.

article 본문 파싱하기

다음과 같이 손쉽게 기사 본문을 파싱 가능합니다.

In [17]:
reader = Goose({'stopwords_class':StopWordsKorean})
In [18]:
url = article['link']
contents = reader.extract(url=url)
contents
Out[18]:
<goose3.article.Article at 0x1bf6b1d5188>
In [19]:
print(article.title+'\n')
print(contents.cleaned_text)
'기생충' 흑백판 26일 개봉… "봉준호 감독이 직접 톤 조절"

아카데미 4관왕에 오르며 전 세계에서 흥행하고 있는 봉준호 감독의 영화 '기생충' 흑백판이 26일 개봉한다.



13일 CJ엔터테인먼트는 "봉준호 감독과 홍경표 촬영감독이 한 장면, 한 장면씩 콘트라스트(명암 대비)와 톤 조절 작업을 거친 '기생충' 흑백판은 컬러와는 또 다른 느낌의 영화를 선보일 것"이라며 포스터와 예고편을 함께 공개했다.



그러면서 "평소 고전 흑백영화에 대한 로망을 가지고 있었던 두 사람은 '마더' 흑백 버전도 작업한 바 있다. 특별 상영, 영화제, 한정판 블루레이로만 공개됐던 '마더' 흑백 버전과 달리 '기생충:흑백판'은 극장 개봉을 통해 보다 많은 관객들에게 흑백만의 미묘한 아름다움과 함께 '기생충'의 강렬함을 새롭게 전할 예정"이라고 설명했다. 





‘기생충: 흑백판’ 포스터는 배우들의 눈을 가린 파격적인 디자인으로 전 세계적인 패러디 열풍을 일으킨 오리지널 포스터의 흑백 버전이다. 표정도 속내도 읽을 수 없는 극과 극 가족들의 모습과 한구석에 누운 의문의 다리는 두 가족 앞에 펼쳐질 걷잡을 수 없는 사건을 더욱 강렬하게 보여준다. 



또한 흑백 색채감의 포스터는 봉준호 감독이 선보였던 웃음과 긴장감, 그리고 슬픔까지 담아낸 가족희비극이라는 새로운 장르를 색다르게 즐기게 할 것을 예고한다. '흑과 백, 넘지 못할 선은 없다'라는 카피와 함께 흑과 백의 다른 색으로 눈을 가린 두 가족의 모습은 '기생충'이 가지고 있는 함축적인 메시지를 상징적으로 담아냈다. 



'기생충'은 지난 9일(현지시각) 미국 캘리포니아주 할리우드 돌비극장에서 열린 제92회 아카데미 시상식에서 작품상을 비롯해 감독상, 각본상, 국제영화상을 수상했다. 특히 영어가 아닌 언어로 만들어진 영화가 작품상을 받은 것은 아카데미 92년 역사상 처음이다.

마지막으로 다시한번 Warning - 뉴스도 저작권 보호를 받습니다!

</html>