【python】「feedparser」を学んでみた。

「Anconda prompt」を開き、「conda install feedparser」と入力する。

conda install feedparser
feedparser 5.2.0 documentation 

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」とは「生の」という意味でエスケープ文字であっても、文字列として扱いなさいという命令になる。以下の例文をご参照ください。

「”」(ダブルクォーテーション)の前にrを付けるとエスケープ文字である「\ 」(バックスラッシュ)も文字列として扱われています。

詳しくは以下をご参照ください。正規表現ではraw文字列を使用することが推奨されています。
re — 正規表現操作 — Python 3.9.2 ドキュメント

今回、RSSの情報をスクレイピングしたいということで「feedparser」をインストールして、使ってみました。「feedparser」を使用することでxmlファイルを解析することができますが、pythonで有名な抽出ツール「BeautifulSoup4」でもxmlファイルを解析することができるので、私は「feedparser」をわざわざインストールして、使用する必要性を感じられませんでした。


参考文献


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング