Python: HTMLタグ内の特定のタグのみを消去する

Python
スポンサーリンク

多くの文字データの中から特定の情報を取り出したいときがあります。

Pythonの正規表現文字列置換(replaceメソッド)を使ってHTML内の特定のタグを消去してみます。

ちなみに正規表現というのは、文字列を特定のパターンとして認識して処理するための機能です。
正規表現は、多くのプログラミング言語で使うことができます。(C++, C#, Java, PHP, JavaScript… Cでも使えると言えば使える。たいていのCコンパイラはC++と同じく提供されているので)

次のHTMLコードからaタグのデータだけを消去したいとします。

<p>プログラミング学習<a href="http://diannao.work/">こちら</a></p>
<p>暇つぶし<a href="https://youtube.com/">こっち</a></p>

最終的にこんな感じで取り出したいとします。

<p>プログラミング学習</p>
<p>暇つぶし</p>

まずは、aタグ部分のみを抽出します。
ここで正規表現を使います。

aタグは、

<a

ではじまり、

</a>

で終わります。
こういった決まりきった部分をパターンと呼びます。

Pythonで正規表現を使って定義するには、まず

import re

でパッケージreをインポートします。

次にパターンの定義です。

# aタグの正規表現(<a href="****">XXXX</a>)
regexp = re.compile("<a.*/a>")

compileメソッドを使うとパターンを定義できます。”~”内の文字列には意味があります。
この場合、<aではじまり/a>で終わるまでを表していて、中にある.任意の1文字*はその繰り返しを表します。

<aから/a>まで何文字あるかは、HTMLによって違うので分かりませんよね。こうした場合に.や*の記号は威力を発揮します。
正規表現で1冊本が書けると言われるくらいなので、この記事では正規表現はこれくらいにしておきます。「覚えておけば色々と楽が出来るようになる!」と頭の片隅においといてください)

プログラムを学ぶ人の中で途中で挫折してしまう人がいます。項目ごとに全て理解してから進もうとする人はまず失敗します。正規表現などもその一つだと思います。次に進みましょう。

パターンを定義したら文字列からパターンを取り出す部分です。
とりあえずHTMLタグの文字列が入った変数としてhtmlを定義しておきます。

# HTMLタグイメージ
html = """
<p>プログラミング学習<a href="http://diannao.work/">こちら</a></p>
<p>暇つぶし<a href="https://youtube.com/">こっち</a></p>
"""

この変数html中からaタグのみを取り出します。
パターンを定義して見つかったaタグを全てリスト形式で抽出できる便利なfindallメソッドが用意されています。

# aタグの正規表現
regexp = re.compile("<a.*/a>")
# htmlからaタグ部分のみを取り出す
atags = regexp.findall(html)

変数atagsには、戻り値として見つかったaタグがリスト形式で格納されます。
イメージとしては、こんな感じで格納されています。

atags[0]の内容 <a href="http://diannao.work/">こちら</a>
atags[1]の内容 <a href="https://youtube.com/">こっち</a>

全てのaタグがatagsに取り出されました。
文字列置換を使ってこのaタグ部分を「」(空文字列)に置き換えます。

# htmlからaタグ部分をreplaceにより消去
for atag in atags:
	html = html.replace(atag, "")

最後に画面に表示してみます。

print(html)

表示結果

<p>プログラミング学習</p>
<p>暇つぶし</p>

以下に今回のプログラム全体を示します。

コメント