Pythonで簡単にRSSを取得・パース可能なライブラリ:feedparser

2010年2月14日

Universal Feed Parser は、Pythonで簡単に RSSを取得・パースするためのライブラリとして有名です。
RSSを取得するAPI自体も非常に簡素ですし、 Atom, RSS1.0, RSS2.0など本来XMLフォーマットが全く異なるものを統一的に扱うことができます。
1
2
# インストール
$ sudo apt-get install python2.4-feedparser

例として、タイトル、要約文、Webページへのリンクを抽出するプログラムを例示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/python 
# -*- encoding: utf-8 -*- 
# coding: utf-8 
import os, sys, string 
import feedparser 

def main(): 
    rssurl = "http://hoge.com/index.rss" 
    print "Crawle RSS Start." 
    try: 
        fdp = feedparser.parse(rssurl) 
    except: 
        print "(Error) can not get the RSS..." 
        sys.exit(1) 
    print "Crawle Done." 

    for entry in fdp['entries']: 
        title = "" 
        link = "" 
        desc = "" 
        if ( "title" in entry ): 
            title = entry['title'] 
        if ( "link" in entry ): 
            link = entry['link'] 

        if ( "description" in entry ): 
            desc = entry["description"] 
        elif ( "content" in entry ): 
            desc = entry["content"] 

        print "Title:\t", title 
        print "URL:\t", link 
        print "Description:\t", desc 

if ( __name__ == "__main__"): 
    main()

以下、上記プログラムの解説です。

まず、「feedparser.parse(rssurl)」メソッドに引数に取得したいRSSのURIを渡します。 

すると、返り値として、パース済みのインスタンスが返ってきます。 

あとは、このインスタンスが辞書配列になっていますので、元々定義されている キーを用いて、実際のエンティティにアクセスします。


詳細は、上記Universal Feed Parserのサイトでご確認ください。

注意すべき点としては、Atom, RSSによって、XMLタグ定義が全く異なるため、 

それ専用のアクセス手段を実装する必要がある点(例:entry["description"]entry["content"]など)です。 


おれはRSS2.0以外知らん!という人には、不要かもしれませんが、様々なフィードを取得したいという方は、 上記のような対策が必要となると思いますので、本家サイトでよく確認されてください。