メールアドレスとリンクをテキストから一括抽出する方法
雑然としたページや書き出しデータからメールアドレスをすべて取り出すには、アドレスの形に合ったパターンを使い、その直後に付いた句読点を整えます。単純なパターンでは、文末のピリオドやカンマまで一緒に取り込んでしまい、難読化された形のアドレスは見逃されます。使う前に、リストを目で確認しておきましょう。
メールアドレス・リンク抽出ページからメールアドレスを抜き出したい無料で使う単純なパターンがうまくいかない理由
よく使われるパターンは、空白以外の文字の並び、@記号、空白以外の文字の並び、という組み合わせです。書きやすい一方で、次の2つの失敗があります。
一つ目は、余分に取り込んでしまうことです。「Contact [email protected], or [email protected].」という文で「\S+@\S+」を使うと、「[email protected],」(末尾にカンマ付き)と「[email protected].」(末尾にピリオド付き)が返ります。これらは正しいアドレスではないため、リストに入れると、メール一斉送信やスパムフィルターで弾かれてしまいます。
二つ目は、取りこぼしが起きることです。「ana [at] example [dot] com」や「ana at example dot com」のような書き方は、まったく検出されません。スクレイピング対策としてこの書き方を使う人や、同じ理由でページ上にこう書くサイトもあります。先に語句を記号に置き換えてから抽出しましょう。
より良いパターンでは、左側にはアドレスに使える文字だけを、右側には英字のドメインだけを許可します。「[\w.+-]+@[\w-]+\.[\w.-]+」が妥当な出発点です。ただし、ドメインの最後の部分にはドットが使えるため、文末にアドレスがあると、ドメイン後ろのピリオドまで含めてしまうことがあります。各一致結果の末尾にあるピリオドは1つ取り除いてください。メール・リンク抽出ツールは末尾の句読点を自動で取り除くため、この手作業が必要になるのは、自分でパターンを書く場合が中心です。
上の2つの例文に、このパターンを当てはめた結果は次のとおりです。
- 「Write to [email protected].」からは「[email protected].」が返ります。末尾のピリオドは取り除く必要があります。
- 「Contact [email protected], or [email protected].」からは「[email protected]」と「[email protected].」が返るため、同じ整え方が必要です。
リンクも同じ問題が起きる
URLにも同じ問題があります。文末のリンクには、ピリオド、カンマ、閉じ括弧が付いていることがよくあります。(see https://example.com/page)のように括弧で囲まれたリンクは、パターンが貪欲だと閉じ括弧まで含めてしまいます。末尾の句読点を整えてから、各リンクがブラウザで開けるか確認しましょう。
リンクは「/contact」のような相対パスの場合もあり、メールアドレスの抽出ではこれらは対象になりません。絶対URLだけが必要かどうかを決めて、抽出する際にその条件を明確にしておきましょう。
ほとんどの書き出しデータで効く手順
- まず検索と置換で難読化された書き方を置き換えます。「[at]」は@に、「[dot]」はピリオドに変えますが、それがアドレスだと確実に分かる箇所だけにしてください。
- テキストまたはページのHTMLソースを、抽出ツールのテキストまたはHTML欄に貼り付けます。アドレスとリンクが抽出され、末尾の句読点は取り除かれます。
- 重複を除外はオンのままにしておきます。メールアドレスの大文字と小文字を区別しないため、[email protected]と[email protected]は1件として数えられます。すでに手元にあるリストの場合は、重複行を削除で同じことができます。
- 順番に並べたい場合は、A→Z順に並べ替えをオンにします。
- 最終的なリストを読み直し、アドレスではないもの(たまたま@を含む画像ファイル名など)がないか確認します。
例を挙げます。あるページに「Sales: [email protected]」「[email protected].」「Support: [email protected]」と書かれているとします。抽出では3件が見つかります。末尾のピリオドを取り除き、大文字と小文字を区別せずに重複を除くと、結果は[email protected]と[email protected]の2件になります。順番に並べたい場合は、抽出ツールのA→Z順に並べ替えをオンにするか、行の並べ替えを使ってください。
リストを整理し、法令を守って使う
メールアドレスは多くの場面で個人データにあたり、迷惑メールを規制する法律も多くの国にあります。公開ページからアドレスを集めたとしても、そこにメールを送ってよいことにはなりません。EUのGDPRや米国のCAN-SPAM法などがよく知られた例で、求められる内容はそれぞれ異なります。ここでの説明は一般的な情報であり、法的助言ではありません。何かを送信する前に、自分とリストの相手に適用されるルールを確認し、一斉送信には配信停止の手段を用意してください。
特殊なケース
- アドレスではない文字列。 [email protected]のような文字列が一致することがあります。ファイル拡張子で終わるものは削除してください。
- 画像内のアドレス。 アドレスがスクリーンショットや写真の中にある場合は、先に画像から文字起こしツールで読み取り、その結果から抽出します。きれいに読み取るためのコツはスクリーンショットや写真から文字をコピーするガイドにまとめています。
- 見えない文字。 アドレスの中に幅のないスペースが入っていると、一致しないため見逃されます。既知のアドレスが抽出されない場合は、抽出前に見えない文字を削除してください。見えない文字がどこから混入するかは見えない文字のガイドで解説しています。
- エンコードされたアドレス。 ページによっては、@(@)のようなHTML文字参照でアドレスを隠しています。先にページのテキストをデコードしないと、パターンは@記号を認識しません。
- 大きな書き出しデータ。 大きなファイルの場合は、結果をファイルに書き出し、想定している行数と件数を照合してください。
よくある質問
メールアドレスの抽出結果の末尾にピリオドが付くのはなぜですか。
ドメインの中ではピリオドが使えるため、ドットを許可するパターンは文末のピリオドまで取り込んでしまいます。各一致結果から末尾のピリオドを1つ取り除いてください。
「name at example dot com」の形で書かれたアドレスを、ツールで見つけられますか。
置き換えの手順なしでは確実ではありません。先に語句を記号に変換しますが、それがアドレスだと明らかな箇所だけに限定し、通常の文章が書き換わらないようにしてください。
ウェブページから抽出したすべてのアドレスに、メールを送ってもよいですか。
それは、あなたと受信者がどこにいるか、そして送る内容によって変わります。迷惑メールやプライバシーに関するルールが適用されるため、まず確認してください。ここでの説明は一般的な情報であり、法的助言ではありません。
英語原文をもとに、AIの支援を受けて翻訳しています。
コメント
まだコメントはありません。最初のコメントを書いてみましょう。


