peketaminの日記

その辺のプログラマーのチラ裏です。

RSSをBeautifulSoupでパース

提供フィードがRSS or RDF or Atom とかそういう場合だと feedparser をよく使うけど、

  • RSS (or フォーマットがある程度決まっているXML) しか来ないことがわかっている
  • RSS2.0 標準仕様にない要素、属性を取得する必要がある

場合、素の feedparserでは、拡張属性が取れないので、頑張る必要があるけど、BeautifulSoupも検討すると良い。

from bs4 import BeautifulSoup

soup = BeautifulSoup(rss, 'xml')
elm = soup.find('category')

# get extededAttributes value in <category extededAttributes="value">foo</category>
my_attr = elm.attrs.get('extendedAttribute')

# parse pubDate
from email.utils import parsedate_to_datetime

d = soup.find('pubDate')
# <pubDate>Sat, 13 Dec 2003 18:30:02 GMT</pubDate>
dt = parsedate_to_datetime(d.text)
# datetime.datetime(2003, 12, 13, 18, 30, 2, tzinfo=datetime.timezone.utc)