「Anconda prompt」を開き、「conda install feedparser」と入力する。
import feedparser
import re
_my_date_pattern = re.compile(
r'(\d{,2})/(\d{,2})/(\d{4}) (\d{,2}):(\d{2}):(\d{2})')
def myDateHandler(aDateString):
"""parse a UTC date in MM/DD/YYYY HH:MM:SS format"""
month, day, year, hour, minute, second = \
_my_date_pattern.search(aDateString).groups()
return (int(year), int(month), int(day), \
int(hour), int(minute), int(second), 0, 0, 0)
feedparser.registerDateHandler(myDateHandler)
d = feedparser.parse(...)
「feedparser」について、わかりやすく解説されている記事がなく、書籍もないので、python初心者が文法などまとめながら、上記の記述を理解できるようにしていきたいと考えています。
まず、pythonの正規表現のモジュール「re」をインポートしています。
「re.compile()」に正規表現パターンを渡すと「Regexオブジェクト」が返ってきます。
変数「_my_date_pattern」には「Regexオブジェクト」が格納されます。
「Regex」とは変更不可な正規表現のこと。
つまり、「Regexオブジェクト」とは変更不可な正規表現の対象物ということになる。
自分で指定した正規表現を引数に渡すのだから、変更しないのは当たり前ではないかと思ってしまう。あまりしっくりこないが次に進む。
「\d」(バックスラッシュd)は1文字の数字を表す。
文字列のクォートの前で「r」と書いてraw文字列を指定し、文字がエスケープしないようにしている。
「raw」とは「生の」という意味でエスケープ文字であっても、文字列として扱いなさいという命令になる。以下の例文をご参照ください。
詳しくは以下をご参照ください。正規表現ではraw文字列を使用することが推奨されています。
○re — 正規表現操作 — Python 3.9.2 ドキュメント
今回、RSSの情報をスクレイピングしたいということで「feedparser」をインストールして、使ってみました。「feedparser」を使用することでxmlファイルを解析することができますが、pythonで有名な抽出ツール「BeautifulSoup4」でもxmlファイルを解析することができるので、私は「feedparser」をわざわざインストールして、使用する必要性を感じられませんでした。
参考文献
○退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング