본문 바로가기
파이썬

rss , Atom 그리고 RDF를 포함해, 피드를 구문 분석하는 파이썬 라이브러리 모듈인 feedparser

by 혜룐 2015. 11. 10.
rss , Atom 그리고 RDF를 포함해, 알려진 형식으로 피드를 구문 분석하는 파이썬 라이브러리 모듈인 feedparser가 있다. 파이썬 2.4부터 3.3 버전을 모두 지원한다고 한다.
( Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds )
https://pypi.python.org/pypi/feedparser 에 가면 tar파일과 설치 하는 방법등이 소개되어있다.
http://www.slideshare.net/LindseySmith1/feedparser
http://www.pythonforbeginners.com/feedparser/using-feedparser-in-python 에서는 간단하게 문법등을 알수 있다.
그럼 feedarser 라이브러리를 설치>사용 해볼까?
설치
easy_install을 통해 설치를 하면 되지만, 외부망 연결이 안되어있는 개발서버라, tar.gz를 내 로컬에 다운로드 받아 서버에 설치를 해야 했다.
다운로드
https://code.google.com/p/feedparser/downloads/list 에서 feedparser-5.1.3.tar.gz 를 다운로드 받는다.
feedparser-5.1.3.tar.gz 압축해제
tar zvxf feedparser-5.1.3.tar.gz
설치
압축을 해제 하면, feedparser-5.1.3 이라는 디렉터리가 생기고, 디렉터리 안에 setup.py 스크립트가 있다.
스크립트 상단에 import
setuptools
모듈을 추가 하고 있는데, 이것도 설치가 되어야 한다.
yum install -y
setuptools
yum을 통해 setiptools를 설치 한다.
python setup.py install 
로 설치를 진행한다.
[root@master feedparser-5.1.3]# python setup.py install
running install
running bdist_egg
running egg_info
writing feedparser/feedparser.egg-info/PKG-INFO
writing top-level names to feedparser/feedparser.egg-info/top_level.txt
writing dependency_links to feedparser/feedparser.egg-info/dependency_links.txt
reading manifest file 'feedparser/feedparser.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'feedparser/feedparser.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
creating build
creating build/lib
copying feedparser/feedparser.py ->build/lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/egg
copying build/lib/feedparser.py ->build/bdist.linux-x86_64/egg
byte-compiling build/bdist.linux-x86_64/egg/feedparser.py to feedparser.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying feedparser/feedparser.egg-info/PKG-INFO ->build/bdist.linux-x86_64/egg/EGG-INFO
copying feedparser/feedparser.egg-info/SOURCES.txt ->build/bdist.linux-x86_64/egg/EGG-INFO
copying feedparser/feedparser.egg-info/dependency_links.txt ->build/bdist.linux-x86_64/egg/EGG-INFO
copying feedparser/feedparser.egg-info/top_level.txt ->build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/feedparser-5.1.3-py2.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing feedparser-5.1.3-py2.6.egg
Copying feedparser-5.1.3-py2.6.egg to /usr/local/python-2.6.4/lib/python2.6/site-packages
Adding feedparser 5.1.3 to easy-install.pth file
Installed /usr/local/python-2.6.4/lib/python2.6/site-packages/feedparser-5.1.3-py2.6.egg
Processing dependencies for feedparser==5.1.3
Finished processing dependencies for feedparser==5.1.3
튜토리얼을 참고로 사용해보자.
SampleFeedparser 라는 클래스를 만들고, 간단하게 test 라는 함수를 만들어보자.
import feedparser
class SampleFeedparser():
def __init__(self, filename):
self.filename = filename
d = feedparser.parse(self.filename)
self.d = d
def test(self):
print self.d['channel']
def main():
fp = SampleFeedparser("http://10.253.2.36/sample/blaMakeXml.xml")
fp.test()
if __name__ == "__main__":
main()
RSS에 chanel element 의 모든 정보와, item들의 모든 정보를 확인 할수 있다.
channel은 challenAll 이라는 함수에, item은 itemAll 이라는 함수안에
각 엘리먼트의 title 이나 link, 또는 description을
확인 하는 방법이다.
import feedparser 
class SampleFeedparser(): 
def __init__(self, filename): 
self.filename = filename 
d = feedparser.parse(self.filename) 
self.d = d 
def channelAll(self): 
print self.d 
## title 
print self.d['feed']['title'] 
print self.d.feed.title
print self.d.channel.title
## link
print self.d.channel.link
## description
print self.d.channel.subtitle
## copyright 
print self.d.channel.rights 
def itemAll(self): 
for entry in
range( len(self.d['entries']) ):
print entry, '\'th ==============================================' 
print 'title of item : ',
self.d['entries']
[entry]['title'] 
print 'links of item : ', self.d['entries'][entry]['links'] 
print 'links-href of item : ', self.d['entries'][entry]['links'][0]['href'] 
print 'links-rel of item : ', self.d['entries'][entry]['links'][0]['rel'] 
print 'description of item : ', self.d['entries'][entry]['summary'] 
print '==================================================' 
print self.d['entries'] 
def itemAll_v2(self):
for entry in range( len(self.d['entries']) ):
print self.d['items'][entry]['title']
print self.d['items'][entry]['summary']
for idx in range( len(self.d['items'][entry]['links']) ):
print self.d['items'][entry]['links'][idx]['href'] 
def test(self):
print '==================================================' 
def main(): 
fp = SampleFeedparser("http://10.253.2.36/sample/blaMakeXml.xml"
print 'channel ===' 
fp.channelAll() 
print 'item ===' 
fp.itemAll() 
if __name__ == "__main__": 
main()