Pythonを使ったメールアドレスのスクレイピング - 究極のガイド2025

パイソン, スクレイピング, 12月13日-2022年5分で読める

見込み客のEメールリストを所有することは、マーケティング担当者がビジネスを拡大するのに役立ちます。Pythonスクリプトを使用してメールアドレスをスクレイピングすることで、ビジネスパーソンはオーディエンスに対してより良いアウトリーチを行うことができる。 MailButler.ioによると、世界には約43億人のメールユーザーがおり、2025年には46億人に達すると推定されている。この統計によると、人々は

見込み客のEメールリストを所有することは、マーケティング担当者がビジネスを拡大するのに役立ちます。Pythonスクリプトを使用してメールアドレスをスクレイピングすることで、ビジネスパーソンはオーディエンスに対してより良いアウトリーチを行うことができます。 

MailButler.ioによると、全世界のEメールユーザーは約43億人で、2025年には46億人に達すると推定されている。これらの統計によると、人々は公式のコミュニケーション手段としてEメールプラットフォームに依存している。この記事では、python言語を使ってメールアドレスをスクレイピングする方法を説明します。 

目次

Pythonを使ったメールアドレスのスクレイピング

良い顧客を持つための最も簡単な方法の一つは、できるだけ多くのビジネスメールアドレスを持ち、彼らにあなたのサービスの詳細を何度も送信することです。インターネット上には、これらのサービスを無料で提供するスクレイピング・ツールが数多く存在するが、データ引き出しの制限がある。彼らはまた、無制限のデータ抽出制限を提供していますが、有料です。自分の手で構築できるのに、なぜ有料なのか?それでは、Pythonを使った高品質のスクレイピング・ツールの構築手順について説明しよう。 

関連記事

最高のPythonウェブスクレイピングツール 

Pythonでプロキシを作成する方法

メールアドレスをスクレイピングする手順

初心者の方にはとても簡単な例になりますが、特にウェブスクレイピングに慣れていない方には勉強になることでしょう。これはステップバイステップのチュートリアルで、制限なくメールアドレスを取得するのに役立ちます。私たちのインテリジェントなウェブスクレイパーの構築プロセスから始めましょう。

ステップ1:モジュールのインポート

今回のプロジェクトでは、以下の6つのモジュールを使用する。

インポート
インポートリクエスト
fromurllib.parseimporturlsplit
fromcollectionsimportdeque
frombs4importBeautifulSoup
importpandasaspd
fromgoogle.colabimportfiles

インポートされたモジュールの詳細は以下の通り:

reは正規表現によるマッチングを行う。requestsはHTTPリクエストを送信する。urlsplitはURLを構成要素に分割する。dequeはリストの形をしたコンテナで、両端への追加やポッピングに使用される。BeautifulSoupはさまざまなウェブページのHTMLファイルからデータを引き出す。

ステップ2:変数の初期化

このステップでは、スクレイピングされたURL、スクレイピングされていないURL、ウェブサイトからスクレイピングに成功したメールの保存セットを保存するdequeを初期化する。

# 入力からurlを読み込む
original_url= input("ウェブサイトのURLを入力してください: ") 
 
# スクレイピングするurlを保存する
unscraped= deque([original_url])
 
# スクレイピングされたURLを保存する
scraped= set()
 
# 取得したEメールを保存する
emails= set()  

セット内では要素の重複は許されないので、すべて一意である。

ステップ3:スクレイピング・プロセスの開始

最初のステップは、スクレイピングされたURLとスクレイピングされていないURLを区別することだ。これを行うには、URLをスクレイピングされていないものからスクレイピングされたものに移動させる。

whilelen(unscraped):
    # unsraped_urlをscraped_urlsセットに移動する
    url = unscraped.popleft() # popleft():dequeの左側から 要素を取り除いて返す
    scraped.add(url)

次のステップは、URLの異なる部分からデータを抽出することである。そのためにurlsplitを使う。

parts =urlsplit(url)

urlsplit() は5つのタプルを返す: (アドレス指定スキーム、ネットワークロケーション、パス、クエリ、フラグメント、識別子)。

機密保持のため、urlsplit()の入力と出力のサンプルを表示することはできませんが、一度試してみると、コードは何らかの値(ウェブサイトのアドレス)を入力するよう求めてきます。出力にはSplitResult()が表示され、SplitResult()の中には5つの属性があります。

これでウェブサイトのURLのベースとパス部分を取得できる。

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url

これは、ウェブサイトにHTTP GETリクエストを送信する時間である。

を試す:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # エラーのあるページは無視し、 次の urlで 続ける
       続ける

Eメールアドレスを抽出するために正規表現を使用し、Eメールセットに追加します。

# 必要に応じて正規表現を編集してもよい
    new_emails =set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  response.text, re.I))# re.I: (大文字小文字を無視)
    email.update(new_emails)

正規表現は、自分の好きな情報を抽出したいときに大いに役立つ。正規表現に慣れていない場合は、Python RegExを参照してください。

次のステップは、ウェブサイトにリンクされているすべてのURLを見つけることだ。

# htmlドキュメントのための美しいスープを作成する
   soup= BeautifulSoup(response.text,'lxml')

The <a href=””> tag indicates a hyperlink that can be used to find all the linked URLs in the document.

for anchor insoup.find_all("a"): 
        
       # アンカーからリンクされたURLを抽出する
        if"href" in anchor.attrs:
          link =anchor.attrs["href"] です。
        else:
          link = ''
        
       # 相対リンクを解決する(/で始まる)
        if link.startswith('/'):
            link = base_url + link
            
        elif not link.startswith('http'):
            リンク = パス + リンク

そして、新しいURLを見つけて、スクレイピング済みにもスクレイピング解除にもなければ、スクレイピング解除のキューに追加する。

このコードを自分で試してみると、すべてのリンクがスクレイピングできるわけではないことに気づくだろう、

if not link.endswith(".gz"):
         unscrapedに linkが なく 、かつ scrapedに linkが ない 場合:
              unscraped.append(リンク)

ステップ4:メールをCSVファイルにエクスポートする

より良い方法で結果を分析するために、メールをCSVファイルにエクスポートします。

df = pd.DataFrame(emails,columns=["Email"]) # お好みのカラム 名に置き換える
df.to_csv('email.csv',index=False)

Google Colabをお使いの場合は、次の方法でファイルをローカルマシンにダウンロードできます。

fromgoogle.colab importfiles
files.download("email.csv")

すでに説明したように、機密保持の問題から、スクラップされたメールアドレスを示すことはできない。 

[免責事項!一部のウェブサイトはウェブスクレイピングを許可しておらず、あなたのIPを永久にブロックする非常に賢いボットを持っています。]

完全なコード

import re
import requests
from urllib.parse import urlsplit
from collections import deque
from bs4 import BeautifulSoup
import pandas as pd
from google.colab import files
 
# read url from input
original_url = input("Enter the website url: ") 
 
# to save urls to be scraped
unscraped = deque([original_url])
 
# to save scraped urls
scraped = set()
 
# to save fetched emails
emails = set()  
 
while len(unscraped):
    url = unscraped.popleft()  
    scraped.add(url)
 
    parts = urlsplit(url)
        
    base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
 
    print("Crawling URL %s" % url)
    try:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        continue
 
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", response.text, re.I))
    emails.update(new_emails) 
 
    soup = BeautifulSoup(response.text, 'lxml')
 
    for anchor in soup.find_all("a"):
      if "href" in anchor.attrs:
        link = anchor.attrs["href"]
      else:
        link = ''
 
        if link.startswith('/'):
            link = base_url + link
        
        elif not link.startswith('http'):
            link = path + link

メールアドレスのスクレイピングにおけるプロキシ

As businesses require numerous email addresses to build their contact list, it is necessary to collect data from multiple sources. A manual data collection process may be tedious and time-consuming. In this case, scrapers usually go for proxies to speed up the process and bypass the restrictions that come their way. Proxyscrape provides high-bandwidth proxies that are capable of scraping unlimited data and work 24/7 to ensure uninterrupted functionality. Their proxy anonymity level is high enough to hide the identity of the scrapers. 

Additionally, it's important to verify email addresses quickly to ensure the quality and accuracy of the contact list. Verifying emails helps reduce bounce rates, protects sender reputation, and improves the effectiveness of outreach campaigns. Without verification, businesses risk wasting resources on invalid or fake addresses.

よくある質問

1.なぜメールアドレスのスクレイピングが必要なのですか?

適格なEメールアドレスを含む潜在的なコンタクトリストを作成することで、ターゲットとなるオーディエンスへのアプローチが容易になります。ほとんどの人がコミュニケーション手段としてEメールを使用しているため、Eメールアドレスを通じて彼らにアプローチするのは非常に簡単です。 

2.メールアドレスのスクレイピングにプロキシは必要ですか?

複数のソースからメールアドレスをスクレイピングする際、スクレイパーはIPブロックや地理的な障壁などの課題に直面することがある。このような場合、プロキシはユーザーのアドレスをプロキシアドレスで隠し、ブロックされたウェブサイトへのアクセスブロックを取り除きます。 

3.メールアドレスのスクレイピングは合法ですか? 

公開されているデータを収集することは常に合法である。そのため、スクレイパーは収集するデータがパブリックドメインで利用可能であることを確認しなければならない。そうでない場合は、事前に許可を得てデータを収集し、スクレイピングの合法性を維持することができる。 

まとめ

この記事では、電子メールアドレスのスクレイピングの実用的な例を示すことで、ウェブスクレイピングのもう一つの不思議について探求した。私たちはPythonを使ってウェブクローラーを作ることで最もインテリジェントなアプローチを試みた。ウェブスクレイピングは、要件を考慮して適切に行えば、大きな助けになります。私たちはメールアドレスをスクレイピングするための非常にシンプルなコードを書きましたが、これは完全に無料です。また、他のサービスに頼る必要もありません。コードをできるだけシンプルにし、カスタマイズの余地も加えました。 

スクレイピング・プロジェクトで使用するプロキシ・サービスをお探しなら、ProxyScrape 住宅用プロキシとプレミアム・プロキシをお忘れなく。