Pythonの正規表現でHTMLリンクからURLを抽出する方法
Pythonの標準ライブラリであるreモジュールを使えば、HTMLリンクタグからURLを簡単に抽出できます。この記事では、re.search()を利用してhref属性の値を取り出す基本的な方法を解説します。
基本的なコード例
以下のコードは、HTMLのアンカータグからURLを抽出するシンプルな例です。
import re
s = '<a href="https://www.santa.com">サンプルリンク</a>'
match = re.search(r'href=[\'"]?([^\'" >]+)', s)
if match:
print(match.group(0))
実行結果
このコードを実行すると、次のような出力が得られます。
href="https://www.santa.com"
正規表現パターンの解説
使用しているパターン r'href=[\'"]?([^\'" >]+)' の各要素は、それぞれ次のような役割を持っています。
href=:リテラル文字列「href=」に一致させます。[\'"]?:シングルクォートまたはダブルクォートがあれば任意で一致させます。属性値が引用符で囲まれていない場合にも対応できる柔軟な指定です。([^\'" >]+):引用符・スペース・「>」以外の文字を1文字以上キャプチャします。この部分がURL本体に該当します。
URLだけを取得したい場合
group(0)はマッチした文字列全体を返します。「href="」などの余計な部分を除き、URLそのものだけを取り出したい場合は、キャプチャグループを参照するgroup(1)を使用します。
import re
s = '<a href="https://www.santa.com">サンプルリンク</a>'
match = re.search(r'href=[\'"]?([^\'" >]+)', s)
if match:
print(match.group(1)) # 出力: https://www.santa.com
注意点:より堅牢なHTML解析にはパーサーを活用
正規表現によるHTML解析は手軽で便利ですが、属性の順序が変わったり改行が含まれたりする複雑なHTMLに対しては脆弱です。実務的なスクレイピングでは、BeautifulSoupやlxmlといった専用のHTMLパーサーを使用することが推奨されます。単純なケースや学習目的であれば、今回のような正規表現のアプローチでも十分に機能します。
-
Pythonの正規表現で単語以外の文字をマッチさせる方法
正規表現を使って文字列から「単語以外の文字」を取り出したい場合、Pythonのreモジュールに用意されている特殊シーケンス \W を使うのが最も簡単です。\W は、英字・数字・アンダースコア([^a-zA-Z0-9_])以外のすべての文字に一致します。以下のコードでは、指定した文字列から単語以外の文字をすべて抽出し、そのリストを出力しています。コード例import re s = ab5z8d*$&Y@ regx = re.compile(r\W) result = regx.findall(s) print(result)ポイントとして、パターン文字列の先頭に r を付けて raw 文字列に
-
【Python】正規表現を使って文字列内の単語をマッチ・抽出する方法
次のコードは、指定された文字列の中から「meeting」という単語を抽出します。ここでは肯定の先読み(look-ahead)と肯定の後読み(look-behind)アサーションを使用しています。これにより、単語を囲む文字の存在を条件として考慮しつつ、その文字自体はマッチ結果に含めないようにできます。コード例import re s = https://www.google.com/meeting_agenda_minutes.html result = re.findall(r(?<=[\W_])meeting(?=[\W_]), s) print(result)出力[meeting]パ