매일 발생하는 사건, 사고를 정리하기 위해 여러 언론사를 드나들며, 카테고리별로 분류하는 것이 어렵지는 않지만 여간 귀찮은 일이 아닐 수 없습니다. 필요한 카테고리의 항목의 내용에 대해 수집하고 자동으로 가공이 되어 결과만 확인할 수 있다면, 시간절약도 가능하고 다른 일에 집중할 수 있을 것입니다.
이번 포스팅은 보안뉴스(www.boannews.com)에서 제공하는 RSS를 이용하여 원하는 기간의 뉴스를 자동으로 수집하고 가공하는 내용에 대해 소개하고자 합니다. 파이썬 모듈인 Feedparser 를 이용하여 자동 수집과 가공하는 방법에 대해 궁금하신 분은 아래 포스팅을 참고하여 활용하였으면 합니다.
Ⅰ. RSS 소개
Ⅱ. 파이썬 모듈 Feedparser 소개
Ⅲ. RSS를 이용한 보안뉴스 클리핑 자동화 with 파이썬
▷ RSS(Rich Site Summary)는 뉴스나 블로그 사이트에서 주로 사용하는 콘텐츠 표현 방식입니다. 웹 사이트 관리자는 RSS 형식으로 웹 사이트 내용을 보여 주고, 이 정보를 받는 사람은 다른 형식으로 이용할 수 있습니다.
▷ RSS를 사용하면 어떤 사이트에 새로운 콘텐츠가 올라왔을 때 해당 사이트에 방문하지 않고, RSS서비스를 통해 RSS 리더 프로그램으로 한 곳에서 그 콘텐츠를 이용할 수 있습니다. 예를 들면, 여러 언론사 사이트를 모두 방문할 필요 없이 다양한 기사를 네이버뉴스 한 곳에서 볼 수 있는 것과 같다고 보면 됩니다.
▷ 현재 국내외 거의 모든 블로그에서 RSS를 지원하고 있으며, 그 외에 일부 언론사나 커뮤니티 사이트에서도 지원을 합니다.
▷ 파이썬을 이용하여 RSS 피드를 쉽게 수집할 수 있도록 도와주는 모듈이 있습니다. Feedparser 라는 모듈 입니다.
▷ 아래 링크에서 Feedparser 모듈 소개와 설치 방법이 있습니다.
▷ feedparser 모듈을 사용하면 RSS 피드를 분석하고 쉽게 사용할 수 있습니다. 상세 사용법은 아래 공식 문서를 참고하기 바랍니다.
▷ 보안뉴스(www.boannews.com)는 정보보안 관련 다양한 소식을 제공하는 언론사 중 하나 입니다. 해당 언론사 역시 RSS를 제공하고 있습니다.
▷ 위의 그림의 카테고리 중 "사건,사고", "보안컬럼", "긴급경보", "보안정책"의 뉴스 기사만 수집하여 가공해보도록 하겠습니다.
▷ 해당 자동화를 위한 파이썬 모듈은 총 3개가 필요합니다. feedparser, datetime, dateutil 이며, 설치 방법은 아래와 같습니다.
→ feedparser : pip install feedparser
→ datetime : pip install datetime
→ dateutil : pip install python-dateutil
▷ 동작 방식은 다음과 같습니다.
→ 수집 기간을 설정하고, 해당 카테고리 별 RSS URL 리스트를 정의합니다.
→ 정의된 RSS URL에 있는 뉴스 기사를 순차적으로 조회하면서 "뉴스 제목", "뉴스 일자", "뉴스 URL", "뉴스 요약"의 내용으로 데이터를 파싱하여 출력 합니다.
▷ 동작 방식을 적용하여 파이썬으로 구현한 내용은 아래와 같습니다.
import feedparser
import datetime
from dateutil.parser import parse
today = datetime.datetime.now()
today_diff = today + datetime.timedelta(days=-1)
feeds = {'1': '사건사고', '2': '보안컬럼', '5': '긴급경보', '6': '보안정책'}
for key, value in feeds.items():
url = 'http://www.boannews.com/media/news_rss.xml?kind=' + key
f = feedparser.parse(url)
articles = f['entries']
cnt_article = 0
print("========================= RSS |", value, "=====================================", '\n')
for article in articles:
article_title = article['title']
article_published = article['updated']
article_link = article['link']
article_summary = article['summary']
article_date = parse(article_published)
if article_date.date() >= today_diff.date():
print(cnt_article + 1, '|', article_title)
print(article_published)
print(article_link)
print(article_summary, '\n')
cnt_article = cnt_article + 1
if cnt_article == 0:
print("해당 카테고리의 피드가 없습니다.", '\n')
print("=============================================================================", '\n')
▷ 결과화면은 아래 그림과 같이 출력 됩니다.
▽ 같이 보면 더 좋은 블로그 글 ▽
인터넷 침해사고 경보와 보안공지 모니터링 with 파이썬 (0) | 2020.12.19 |
---|---|
인스타그램 좋아요, 맞팔 자동화 with 파이썬 (13) | 2020.12.04 |
쿠팡에서 내 제품 검색 결과 확인 자동화 with 파이썬 (7) | 2020.11.21 |
파이참(pycharm) 단축키 설명 (1) | 2020.11.17 |
웹페이지의 외부 URL 리스트 확인 방법 with 파이썬 (3) | 2020.11.13 |
댓글 영역