Python 文字列からURLやメールアドレスを抽出

スポンサーリンク
スポンサーリンク

はじめに

正規表現などを屈指しなくても、簡単にURLやメールアドレスを抜き取ることができます。

使用するライブラリ

URLExtract

標準ライブラリではありませんのでインストールが必要になります。

pip install urlextract
urlextract
Collects and extracts URLs from given text.

ドキュメント

今回、ご紹介する機能以下にもありますので、詳しくはドキュメントを参照してください。

Welcome to urlextract’s documentation! — urlextract 1.4.0 documentation

URLExtractの仕様

  1. 文字列の中にTLD(トップレベルドメイン)が存在するかチェックします。
  2. TLDが見つかった場合、その位置から終わりを検索します。
    終わりの判断は、空白、コンマ、一重引用符、または二重引用符です。

全角に注意が必要です。

文字列からURLを抽出

extractor.find_urls(txt)

  • URLの検索結果をリスト型で返します。
  • オプション(パラメータ)には以下の3種類があります。
    • only_unique=False
      • Trueにすると、一意のURLのみを返します。
    • check_dns=False
      • Trueにすると、結果もドメインを有効かフィルタリングします。
    • get_indices=False
      • Trueにすると、検索されたURLの位置(インデックス)をタプル型で返します。
import pprint

from urlextract import URLExtract

txt = """
以下がURLになります。

! https://goo.gl/maps/iWtCd4xT48GCtg9n8
! http://localhost:8888/notebooks/
! https://github.com/lipoja/URLExtract/blob/master/docs/index.rst
! https://www.apple.com/jp/(日本語サイト
! https://日本語.jp
! https://www.icloud.com

以上です。
"""
extractor = URLExtract()
urls = extractor.find_urls(txt)

pprint.pprint(urls)

# ['https://goo.gl/maps/iWtCd4xT48GCtg9n8',
#  'http://localhost:8888/notebooks/',
#  'https://github.com/lipoja/URLExtract/blob/master/docs/index.rst',
#  'https://www.apple.com/jp/(日本語サイト',
#  'https://www.icloud.com']

結果から、以下の注意が必要になります。

  • 日本語が入ったURLに対応しているが、日本語ドメインは対応していない
  • などは認識しない。

ローカルホストを除外する場合

予めクラスのオプションを指定する必要があります。

extractor.extract_localhost=False

import pprint

from urlextract import URLExtract

txt = """
以下がURLになります。

! https://goo.gl/maps/iWtCd4xT48GCtg9n8
! http://localhost:8888/notebooks/
! https://github.com/lipoja/URLExtract/blob/master/docs/index.rst
! https://www.apple.com/jp/(日本語サイト
! https://日本語.jp
! https://www.icloud.com

以上です。
"""

extractor = URLExtract()
extractor.extract_localhost=False
urls = extractor.find_urls(txt)

pprint.pprint(urls)

# ['https://goo.gl/maps/iWtCd4xT48GCtg9n8',
# 'https://github.com/lipoja/URLExtract/blob/master/docs/index.rst',
# 'https://www.apple.com/jp/(日本語サイト',
# 'https://www.icloud.com']

文字列からメールアドレスも抽出

基本的にはURLと同じですが、予めクラスのオプションを指定する必要があります。

extractor.extract_email=True

  • デフォルトはFalseになっています。
import pprint
from urlextract import URLExtract

txt = """
以下がURLになります。
!  https://www.google.co.jp
!  https://www.bing.com
!  abc@google.co.jp
以上です。
"""
extractor = URLExtract()
extractor.extract_email=True
urls = extractor.find_urls(txt)
pprint.pprint(urls)

# ['https://www.google.co.jp', 'https://www.bing.com', 'abc@google.co.jp']
メールアドレスだけでなく、URLも抽出されます。

コメント

タイトルとURLをコピーしました