dunkel proxyscrape logo

Scraping E-Mail-Adressen mit Python - Ultimative Anleitung 2024

Python, Scraping, Dez-02-20225 Min. gelesen
Der Besitz einer Liste von E-Mail-Interessenten kann Vermarktern helfen, ihr Geschäft zu vergrößern. Durch das Auslesen von E-Mail-Adressen mithilfe von Python-Skripten können Geschäftsleute ihre Zielgruppe besser erreichen. 
Laut MailButler.io gibt es weltweit fast 4,3 Milliarden E-Mail-Nutzer, die bis 2025 schätzungsweise 4,6 Milliarden erreichen werden. Diese Statistiken besagen, dass sich die meisten Menschen auf die E-Mail-Plattform für ihre offizielle Kommunikationsform verlassen. Dieser Artikel führt Sie durch den Prozess des Scrapens von E-Mail-Adressen mit Python. 

Inhaltsübersicht

Scraping von E-Mail-Adressen mit Python

Eine der einfachsten Möglichkeiten, einen guten Kundenstamm zu haben, ist es, so viele geschäftliche E-Mail-Adressen wie möglich zu haben und ihnen immer wieder Einzelheiten über Ihre Dienstleistungen zu schicken. Es gibt viele Scraping-Tools im Internet, die diese Dienste kostenlos anbieten, aber sie haben Datenentnahmebeschränkungen. Sie bieten auch unbegrenzte Datenextraktionslimits, aber sie sind kostenpflichtig. Warum sollte man sie bezahlen, wenn man sie auch selbst bauen kann? Lassen Sie uns die Schritte zur Erstellung eines hochwertigen Scraping-Tools mit Python besprechen. 

Verwandte Artikel

Schritte zum Scrapen von E-Mail-Adressen

Obwohl es sich um ein sehr einfaches Beispiel für Anfänger handelt, wird es eine Lernerfahrung sein, besonders für diejenigen, die neu im Web Scraping sind. Dies ist ein Schritt-für-Schritt-Tutorial, das Ihnen helfen wird, E-Mail-Adressen ohne Einschränkungen zu erhalten. Beginnen wir mit dem Bauprozess unseres intelligenten Web Scrapers.

Schritt 1: Module importieren

Wir werden die folgenden sechs Module für unser Projekt verwenden.

re importieren 
importiere Anfragen
from urllib.parse import urlsplit
from collections import deque
von bs4 importieren BeautifulSoup
importiere pandas als pd
from google.colab importiert Dateien

Die Einzelheiten zu den importierten Modulen sind nachstehend aufgeführt:

  1. re steht für den Abgleich mit regulären Ausdrücken.
  2. für das Senden von HTTP-Anfragen.
  3. urlsplit zum Aufteilen der URLs in ihre Bestandteile.
  4. deque ist ein Container, der die Form einer Liste hat, die zum Anhängen und Löschen an beiden Enden verwendet wird.
  5. BeautifulSoup für das Abrufen von Daten aus HTML-Dateien von verschiedenen Webseiten.
  6. pandas für die E-Mail-Formatierung in DataFrame und für weitere Operationen.

Schritt 2: Initialisierung von Variablen

In diesem Schritt wird eine Deque initialisiert, in der die gescrapten URLs, die nicht gescrapten URLs und eine Reihe von E-Mails gespeichert werden, die erfolgreich von den Websites gescraped wurden.

# Url aus Eingabe lesen
original_url = input("Geben Sie die Website-URL ein: ") 
 
# Urls speichern, die ausgewertet werden sollen
unscraped = deque([original_url])
 
# zum Speichern der ausgewerteten URLs
ausgekratzt = set()
 
# zum Speichern der abgerufenen Emails
emails = set()  

Doppelte Elemente sind in einer Menge nicht erlaubt, so dass sie alle eindeutig sind.

Schritt 3: Starten des Scraping-Prozesses

  1. Der erste Schritt besteht darin, zwischen gescrapten und nicht gescrapten URLs zu unterscheiden. Dies geschieht, indem eine URL von "unscraped" zu "scraped" verschoben wird.
while len(unscraped):
    # verschiebe unsraped_url in scraped_urls set
    url = unscraped.popleft() # popleft(): Entfernt ein Element von der linken Seite der Queue und gibt es zurück
    scraped.add(url)
  1. Der nächste Schritt besteht darin, Daten aus verschiedenen Teilen der URL zu extrahieren. Zu diesem Zweck werden wir urlsplit verwenden.
Teile = urlsplit(url)

urlsplit() gibt ein 5-Tupel zurück: (Adressierungsschema, Netzstandort, Pfad, Abfrage, Fragment, Bezeichner).

Aus Gründen der Vertraulichkeit kann ich keine Beispieleingaben und -ausgaben für urlsplit() zeigen, aber wenn Sie es versuchen, wird der Code Sie auffordern, einen Wert einzugeben (Website-Adresse). In der Ausgabe wird das SplitResult() angezeigt, und innerhalb des SplitResult() gibt es fünf Attribute.

Auf diese Weise erhalten wir den Basis- und Pfadteil für die Website-URL.

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
  1. Dies ist der Zeitpunkt, an dem die HTTP-GET-Anfrage an die Website gesendet wird.
versuchen:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # Seiten mit Fehlern ignorieren und mit der nächsten Url fortfahren 
       weiter
  1. Um die E-Mail-Adressen zu extrahieren, verwenden wir die reguläre Ausdrücke und fügen sie dann dem E-Mail-Set hinzu.
# Sie können den regulären Ausdruck nach Ihren Anforderungen bearbeiten
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  response.text, re.I)) # re.I: (Groß-/Kleinschreibung ignorieren)
    emails.update(neue_emails)
Reguläre Ausdrücke sind eine große Hilfe, wenn Sie die Informationen Ihrer Wahl extrahieren wollen. Wenn Sie mit ihnen nicht vertraut sind, können Sie einen Blick auf Python RegEx werfen, um mehr Details zu erfahren.
  1. Der nächste Schritt besteht darin, alle mit der Website verknüpften URLs zu finden.
# eine schöne Suppe für das HTML-Dokument erstellen
   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 in soup.find_all("a"): 
        
       # Extrahiere die verlinkte Url aus dem Anker
        if "href" in anker.attrs:
          link = anchor.attrs["href"]
        sonst:
          link = ''
        
       # relative Links auflösen (beginnend mit /)
        if link.startswith('/'):
            link = base_url + link
            
        elif not link.startswith('http'):
            link = path + link

Dann suchen wir die neuen URLs und fügen sie in die "Unscraped"-Warteschlange ein, wenn sie weder in der "Scraped"- noch in der "Unscraped"-Warteschlange enthalten sind.

Wenn Sie den Code selbst ausprobieren, werden Sie feststellen, dass nicht alle Links abgegriffen werden können, so dass wir auch diese ausschließen müssen,

if not link.endswith(".gz" ):
         wenn nicht link in unscraped und nicht link in scraped:
              unscraped.append(link)

Schritt 4: Exportieren von E-Mails in eine CSV-Datei

Um die Ergebnisse besser analysieren zu können, werden wir die E-Mails in eine CSV-Datei exportieren.

df = pd.DataFrame(emails, columns=["Email"]) # durch den gewünschten Spaltennamen ersetzen
df.to_csv('email.csv', index=False)

Wenn Sie Google Colab verwenden, können Sie die Datei auf Ihren lokalen Rechner herunterladen, indem Sie

from google.colab import files
files.download("email.csv")

Wie bereits erläutert, kann ich die gestrichenen E-Mail-Adressen aus Gründen der Vertraulichkeit nicht anzeigen. 

[Haftungsausschluss! Einige Websites erlauben kein Web-Scraping und haben sehr intelligente Bots, die Ihre IP-Adresse dauerhaft blockieren können; Scraping erfolgt also auf eigene Gefahr].

Vollständiger Code

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

Proxies beim Scraping von E-Mail-Adressen

Da Unternehmen für den Aufbau ihrer Kontaktliste zahlreiche E-Mail-Adressen benötigen, ist es notwendig, Daten aus mehreren Quellen zu sammeln. Eine manuelle Datenerfassung kann mühsam und zeitaufwändig sein. In diesem Fall greifen Scraper in der Regel auf Proxys zurück, um den Prozess zu beschleunigen und die Beschränkungen zu umgehen, die auf sie zukommen. Proxyscrape bietet Proxys mit hoher Bandbreite, die in der Lage sind, unbegrenzt Daten zu scrapen und rund um die Uhr zu arbeiten, um eine ununterbrochene Funktionalität zu gewährleisten. Der Anonymitätsgrad des Proxys ist hoch genug, um die Identität der Scraper zu verbergen. 

Häufig gestellte Fragen

1. Warum ist es notwendig, E-Mail-Adressen auszulesen?

Die Erstellung einer potenziellen Kontaktliste mit qualifizierten E-Mail-Adressen erleichtert die Ansprache der Zielgruppe. Da die meisten Menschen E-Mail als Kommunikationsmedium nutzen, ist es einfacher, sie über E-Mail-Adressen zu erreichen. 

2. Brauchen wir Proxys für das Scraping von E-Mail-Adressen?

Beim Scrapen von E-Mail-Adressen aus verschiedenen Quellen können Scraper auf einige Herausforderungen wie IP-Sperren oder geografische Barrieren stoßen. In diesem Fall verbergen Proxys die Adressen der Nutzer mit der Proxy-Adresse und beseitigen die Blockaden beim Zugriff auf gesperrte Websites. 

3. Ist es legal, E-Mail-Adressen auszuspionieren? 

Es ist immer legal, öffentlich zugängliche Daten zu sammeln. Scraper müssen also sicherstellen, dass die Daten, die sie sammeln, öffentlich zugänglich sind. Ist dies nicht der Fall, können sie Daten mit vorheriger Genehmigung sammeln, um die Legalität des Scrappings zu wahren. 

Einpacken

In diesem Artikel haben wir ein weiteres Wunder des Web Scraping erforscht, indem wir ein praktisches Beispiel für das Scraping von E-Mail-Adressen gezeigt haben. Wir haben den intelligentesten Ansatz ausprobiert, indem wir unseren Web-Crawler mit Python erstellt haben, und zwar mit der einfachsten und dennoch leistungsfähigsten Bibliothek namens BeautfulSoup. Web Scraping kann eine große Hilfe sein, wenn man es richtig macht und die Anforderungen berücksichtigt. Obwohl wir einen sehr einfachen Code für das Scraping von E-Mail-Adressen geschrieben haben, ist er völlig kostenlos, und Sie müssen sich auch nicht auf andere Dienste verlassen. Ich habe mein Bestes gegeben, um den Code so weit wie möglich zu vereinfachen und auch Raum für Anpassungen zu lassen, damit Sie ihn entsprechend Ihren eigenen Anforderungen optimieren können. 

Wenn Sie nach Proxy-Diensten suchen, die Sie für Ihre Scraping-Projekte nutzen können, sollten Sie sich die Proxys von ProxyScrape für Privatpersonen und Premium-Proxys ansehen.