Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How to pull public emails and social links from a list of company websites with Python

2026年10月22日に「Dev.to」が公開したITニュース「How to pull public emails and social links from a list of company websites with Python」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonスクリプトを使い、企業のWebサイトから公開されている連絡先メールアドレス(info@など)や、LinkedInなどのソーシャルメディアリンクを効率的に収集する技術を解説。robots.txtを尊重し、不要な巡回を避けつつ、難読化された情報も抽出する工夫を紹介する。

ITニュース解説

ニュース記事は、Pythonプログラミング言語を使って企業ウェブサイトから公開されているメールアドレスやソーシャルメディアのリンクを効率的に収集する方法を紹介している。これは、例えば顧客管理システム(CRM)からエクスポートされた企業ドメインのリストや、カンファレンスの参加企業リストがあるときに、各企業への公開連絡先(info@やsales@のようなメールアドレス)や、LinkedInの企業ページなどの情報を手に入れたい場合に非常に役立つ技術だ。多くの企業はこれらの情報をウェブサイトのフッターや「連絡先」、「会社概要」、「Impressum」(特にドイツ語圏の国で法律で義務付けられている)といったページに掲載しているため、特別な検索エンジンを使ったり、ブラウザをシミュレートするツール(ヘッドレスブラウザ)を使ったりすることなく、PythonのrequestsライブラリというHTTPリクエストを送信するためのシンプルなツールで情報を取得できるという点がポイントである。

この情報収集スクリプトは、ウェブサイトを闇雲にクロールするのではなく、いくつかの賢い工夫を取り入れている。まず、サイト全体を隅々まで調べることは、時間がかかり、サーバーに余計な負担をかけるため避けるべきだと考えられている。その代わりに、最初に企業のホームページにアクセスし、そこから「contact」や「about」、「impressum」といった、連絡先情報が掲載されている可能性のあるキーワードを含むリンクだけを辿るように設計されている。これにより、必要な情報に効率よくたどり着き、無関係なページへのアクセスを最小限に抑えることができる。Pythonのurllib.parseモジュールを使ってURLを解析し、正規表現(reモジュール)を使ってこれらのキーワードをURLパスから見つけ出す処理が行われる。特に、ドイツやオーストリアのサイトに法的に義務付けられている「Impressum」ページは、メールアドレスが記載されていることが非常に多いため、これを対象に含めることは重要だ。

次に、ウェブサイトのルールを尊重することは非常に大切だ。ウェブサイトには通常、「robots.txt」というファイルが置かれており、どのページをロボット(自動プログラム)がクロールしても良いか、あるいはクロールしてはいけないかを指定している。このスクリプトでは、Pythonの標準ライブラリにあるrobotparserモジュールを使って、この「robots.txt」ファイルを読み込み、解析する。これにより、アクセスが許可されていないページには決してアクセスしないように配慮されている。これは、ウェブサイトの運用者に迷惑をかけず、合法的に情報を収集するための基本的なマナーであり、システムエンジニアとして自動化ツールを開発する際には常に意識すべき点である。

メールアドレスの抽出には、いくつかの工夫が凝らされている。通常のmailto:リンクや直接表示されているメールアドレスは、シンプルな正規表現で比較的容易に見つけられる。しかし、ウェブサイトによっては、スパムロボットによる収集を防ぐために、メールアドレスを意図的に難読化している場合がある。例えば、@記号をHTMLエンティティ(@など)で表現したり、「sales [at] acme [dot] com」のように文字で表現したりするケースだ。スクリプトでは、HTMLエンティティをデコードするためにhtml.unescape関数を使用し、後者のような手動で難読化された形式も検出するための専用の正規表現(OBFUSCATED_RE)を用意している。これにより、様々な形式で記述されたメールアドレスを正確に抽出できる。また、logo@2x.pngのような画像ファイル名が誤ってメールアドレスと認識されないよう、一般的な画像ファイルの拡張子(.png, .jpgなど)で終わるものは除外する工夫も含まれている。抽出されたメールアドレスは、info@やsales@といった一般的な役割を示すものと、個人の名前を連想させるものとを区別する機能も持つ。これは、アウトリーチの目的や、欧州連合のGDPRのような個人データ保護に関する規制を考慮する上で重要な視点であり、倫理的な利用を促す。

ソーシャルメディアのリンクを抽出する際にも注意が必要だ。多くのウェブページには、「Xでシェア」や「Facebookでシェア」といった共有ボタンが設置されているが、これらは会社の公式プロフィールへのリンクではない。スクリプトは、正規表現の「負の先読み」(?!)という機能を使って、これらの共有ボタンへのリンクを除外し、純粋に企業の公式プロフィールページへのリンクのみを抽出するように設計されている。LinkedIn、X(旧Twitter)、Facebook、GitHub、YouTubeといった主要なプラットフォームに対応する正規表現が用意されており、それぞれのプラットフォームのURLパターンを正確に捉える。さらに、ウェブページ内にJSON形式で埋め込まれたリンクでは、https:\/\/のようにバックスラッシュでエスケープされていることがある。これらのエスケープ文字を除去し、www.の有無や末尾のスラッシュといった表記の揺れを統一(正規化)することで、同じリンクが複数回検出されるのを防ぎ、重複のないクリーンなリストを得ることができる。

このスクリプト全体は、特定のドメインに対して上記のステップを順に実行していく「scan」関数を中心に動作する。ホームページから始まり、robots.txtのルールに従いながら、連絡先が掲載されそうなページをいくつか巡回し、メールアドレスやソーシャルメディアリンクを抽出していく。収集された情報は、最終的にCSV形式で出力され、各ドメインに対して、クロールしたページ数、役割ベースのメールアドレス、その他のメールアドレス、そして各ソーシャルメディアのリンクが整理されて表示される。

ただし、このような正規表現ベースの情報収集には限界もある。例えば、JavaScriptによってコンテンツが動的に生成されるウェブサイトでは、スクリプトが取得するHTMLの初期状態では必要な情報が含まれていないため、情報がほとんど抽出できない場合がある。このようなケースでは、ブラウザをシミュレートするヘッドレスブラウザのような高度なツールが必要となる。また、一部のウェブサイトは、ブラウザ以外のユーザーエージェント(つまり自動プログラム)からのアクセスをブロックするように設定されていることがある。そのようなサイトからは情報を取得できないが、スクリプトは無理な再試行を避け、単に「データなし」として処理する。電話番号や住所といった情報も収集可能だが、これらは国によってフォーマットが大きく異なるため、スクリプトの複雑さを避けるために今回の実装では意図的に含められていない。

このスクリプトは、システムエンジニアを目指す初心者にとって、ウェブスクレイピング(ウェブサイトからの情報収集)の基本的な考え方、requestsライブラリの使い方、正規表現によるパターンマッチング、URLの解析、そしてrobots.txtによる倫理的なクロールの重要性など、多くの実用的なスキルを学ぶ良い機会を提供する。実際に手を動かしてコードを試すことで、ウェブがどのように情報を公開し、それをプログラムでどのように活用できるかを深く理解できるだろう。

関連コンテンツ

関連IT用語

関連ITニュース