본문 바로가기
IT/Python

티스토리 RSS 클리핑 하기

by 큰공 2021. 3. 29.
728x90
반응형

 

개요

 파이썬을 이용하여, RSS 피드를 가지고 오는 것을 해보기로 한다.

 티스토리 블로그는 RSS 형식을 지원한다. RSS는 여러가지로 사용이 되는데, 해당 블로그의 주소 타이틀 등을 얻어 올 수 있는 매개체 역할을 한다.

 해당 과정은 추후 파이썬 자동화 방문자수 늘리기에 기초 과정이 될 것이다.

 

RSS 란?

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

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

 쉽게 얘기 하면 해당 사이트에 방문하지 않고, 손 쉽게 볼 수 있는 역할을 할 수 있는 것 이라고 보면 된다.

 내 블로그를 구독하는 사람인데, 실시간으로 내 블로그의 최신 포스팅을 알림을 받고 싶거나, 여러개의 블로그를 RSS를 해놓고 최신 글 중 내가 원하는 것을 쉽게 모아 보기 위해서 사용한다.

 

파이썬 FeedParser

 RSS 형식을 원하는 형식으로 parsing 하기 위해서는 파이썬에서 FeedParser 라는 라이브러리를 설치 및 import 해주어야 한다.

 아래와 같이 pip install 을 이용하여 손쉽게 설치가 가능하다.

$ pip install feedparser

$ pip install feedparser
Collecting feedparser
  Downloading feedparser-6.0.2-py3-none-any.whl (80 kB)
     |████████████████████████████████| 80 kB 993 kB/s 
Collecting sgmllib3k
  Downloading sgmllib3k-1.0.0.tar.gz (5.8 kB)
Using legacy 'setup.py install' for sgmllib3k, since package 'wheel' is not installed.
Installing collected packages: sgmllib3k, feedparser
    Running setup.py install for sgmllib3k ... done
Successfully installed feedparser-6.0.2 sgmllib3k-1.0.0
WARNING: You are using pip version 20.2.2; however, version 21.0.1 is available.
You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.8/bin/python3 -m pip install --upgrade pip' command.

 

SSL 에러

 인터넷 웹 환경에 따라, 아래와 같은 에러가 발생하게 되면, SSL 에러를 핸들링 한다.

 [SSL: CERTIFICATE_VERIFY_FAILED] 에러는 Python이 stdlib http 클라이언트에 대해 기본적으로 인증서 검증을 적용하기 시작했기 때문에, 발생한다. 아래 패치를 이용하여, 인증서 검증을 하지 않도록 예외 처리를 하면 된다.

 

url = "https://coinpipe.tistory.com/rss"

feed = feedparser.parse(url)

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1123)

During handling of the above exception, another exception occurred:

현재 Feedparser 사용자는 monkey patch 를 통해서만 인증서 검증을 피할 수 있다.

 

import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

 

 

코드 작성

 내 블로그를 구독하는 사람인데, 실시간으로 내 블로그의 최신 포스팅을 알림을 받고 싶거나, 여러개의 블로그를 RSS를 해놓고 최신 글 중 내가 원하는 것을 쉽게 모아 보기 위해서 사용한다.

import feedparser
import ssl

if hasattr (ssl, '_create_unverified_context') :
    ssl._create_default_https_context = ssl._create_unverified_context

url = "https://coinpipe.tistory.com/rss"

feed = feedparser.parse(url)

for idx, entry in enumerate(feed.entries) :
    url = entry['id']
    value = entry['title_detail']['value']
    print ( url + " " + value )

 feeparser 와 ssl 을 import 해주고, 위에서 언급한 ssl 관련 에러를 핸들링 하기 위해서 ssl 인증을 회피학 위한 문구를 추가한다.

 rss 클리핑하기 위한 주소를 입력하고, feedparser에 그 url 을 전달하여, feed 리스트를 얻어온다.

 feed 리스트에서 반복문을 돌면서, url 과 title 값을 얻어온다.

 

결과

 최신글인 99번 부터 순서대로 글의 URL 과 타이틀이 정상적으로 출력된다.

https://coinpipe.tistory.com/99 블로그 썸네일 이쁘게 만들기
https://coinpipe.tistory.com/98 OpenGrok Crontab 으로 주기적으로 indexing 하기
https://coinpipe.tistory.com/97 Opengrok 설치 하기
https://coinpipe.tistory.com/96 Repo Init 에러 해결 하기
https://coinpipe.tistory.com/95 네이버 웨일 광고 삭제
https://coinpipe.tistory.com/94 Signature from server's host key is invalid error
https://coinpipe.tistory.com/93 QT 첫 시작 Hello World 출력하기
https://coinpipe.tistory.com/92 파이썬 인스타그램 좋아요 봇 만들기 #15 자동 팔로우 하기
https://coinpipe.tistory.com/91 우분투 18.04 환경에서 QT 설치
https://coinpipe.tistory.com/89 애자일 (Agile) 개발 방법론

 

맺으며

 티스토리 블로그를 RSS 형식의 Parsing 하여, 최신 게시물의 url 를 얻어오자.

 

 

 

728x90
반응형

댓글