donker proxyscrape logo

E-mailadressen scrapen met Python - Ultieme handleiding 2024

Python, Schrapen, 02-02-20225 min gelezen
Het bezitten van een lijst met e-mailadressen kan marketeers helpen om hun bedrijf uit te breiden. Door e-mailadressen te schrapen met behulp van Python-scripts kunnen zakenmensen hun publiek beter bereiken. 
MailButler.io zegt dat er wereldwijd bijna 4,3 miljard e-mailgebruikers zijn, wat naar schatting zal oplopen tot 4,6 miljard in 2025. Deze statistieken zeggen dat mensen meestal vertrouwen op het e-mailplatform voor hun officiële manier van communiceren. Dit artikel leidt je door het proces van het schrapen van e-mailadressen met behulp van python. 

Inhoudsopgave

E-mailadressen scrapen met Python

Een van de makkelijkste manieren om een goede klantenkring te krijgen, is om zoveel mogelijk zakelijke e-mailadressen te hebben en ze keer op keer je servicegegevens te sturen. Er zijn veel schraaptools op het internet die deze diensten gratis aanbieden, maar ze hebben een datalimiet voor terugtrekkingen. Ze bieden ook onbeperkte gegevensopnamelimieten, maar die zijn betaald. Waarom zou je ze betalen als je er zelf een kunt bouwen? Laten we de stappen bespreken om een kwaliteit schraaptool te bouwen met Python. 

Verwante artikelen

Stappen om e-mailadressen te schrapen

Hoewel het een zeer eenvoudig voorbeeld zal zijn voor beginners, zal het een leerervaring zijn, vooral voor degenen die nieuw zijn in web scraping. Dit wordt een stap-voor-stap tutorial die je zal helpen om onbeperkt e-mailadressen te verzamelen. Laten we beginnen met het bouwproces van onze intelligente webscraper.

Stap 1: Modules importeren

We gebruiken de volgende zes modules voor ons project.

import re
importeer verzoeken
van urllib.parse importeer urlsplit
van collections importeer deque
van bs4 importeert BeautifulSoup
importeer pandas als pd
uit google.colab importeer files

De details van de geïmporteerde modules staan hieronder:

  1. re is voor regular expression matching.
  2. verzoeken voor het verzenden van HTTP-verzoeken.
  3. urlsplit om URL's op te delen in onderdelen.
  4. deque is een container in de vorm van een lijst die wordt gebruikt om aan beide uiteinden te appen en te popping.
  5. BeautifulSoup voor het ophalen van gegevens uit HTML-bestanden van verschillende webpagina's.
  6. pandas voor e-mailopmaak in een DataFrame en voor verdere bewerkingen.

Stap 2: Variabelen initialiseren

In deze stap initialiseren we een deque die de geschraapte URL's, niet-geschraapte URL's en een set succesvol geschraapte e-mails opslaat.

# lees url van invoer
original_url = input("Voer de website url in: ") 
 
# urls opslaan om te scrapen
unscraped = deque([original_url])
 
# om geschraapte url's op te slaan
geschraapt = set()
 
# om opgehaalde e-mails op te slaan
e-mails = set()  

Dubbele elementen zijn niet toegestaan in een set, dus ze zijn allemaal uniek.

Stap 3: Het scrapproces starten

  1. De eerste stap is om onderscheid te maken tussen de gescrapte en niet gescrapte URL's. De manier om dit te doen is door een URL te verplaatsen van unscraped naar scraped.
while len(unscraped):
    # move unsraped_url to scraped_urls set
    url = unscraped.popleft() # popleft(): Verwijder en retourneer een element van de linkerkant van deque
    scraped.add(url)
  1. De volgende stap is het extraheren van gegevens uit verschillende delen van de URL. Hiervoor gebruiken we urlsplit.
delen = urlsplit(url)

urlsplit() retourneert een 5-tupel: (adresseringsschema, netwerklocatie, pad, query, fragment, identifier).

Ik kan geen voorbeeldinvoer en -uitvoer tonen voor urlsplit() vanwege vertrouwelijke redenen, maar als je het probeert, zal de code je vragen om een waarde in te voeren (websiteadres). De uitvoer zal de SplitResult() weergeven, en binnen de SplitResult() zouden er vijf attributen zijn.

Hiermee krijgen we het basis- en padgedeelte voor de URL van de website.

base_url = "{0.scheme}://{0.netloc}".format(parts)
    if '/' in parts.path:
      path = url[:url.rfind('/')+1]
    else:
      path = url
  1. Dit is het moment om het HTTP GET-verzoek naar de website te sturen.
proberen:
        response = requests.get(url)
    behalve (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # negeer pagina's met fouten en ga verder met volgende url
       doorgaan
  1. Voor het extraheren van de e-mailadressen gebruiken we de reguliere expressie en voegen deze toe aan de e-mailverzameling.
# U kunt de reguliere expressie bewerken zoals u wilt
    new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                  antwoord.tekst, re.I)) # re.I: (geval negeren)
    e-mails.update(new_emails)
Reguliere expressies zijn een enorme hulp als je de informatie van je eigen keuze wilt extraheren. Als je er niet vertrouwd mee bent, kun je Python RegEx bekijken voor meer details.
  1. De volgende stap is het vinden van alle gelinkte URL's naar de website.
# maak een mooie soep voor het html-document
   soep = BeautifulSoup(response.text, 'lxml')

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

voor anker in soep.find_all("a"): 
        
       # haal gelinkte url uit het anker
        als "href" in anchor.attrs:
          link = anchor.attrs["href"]
        anders:
          link = ''
        
       # relatieve links (beginnend met /) oplossen
        als link.startswith('/'):
            link = base_url + link
            
        elif niet link.startswith('http'):
            link = path + link

Dan zullen we de nieuwe URL's vinden en ze toevoegen aan de unscraped wachtrij als ze noch in de scraped noch in de unscraped staan.

Als je de code zelf uitprobeert, zul je merken dat niet alle links kunnen worden geschraapt, dus moeten we ze ook uitsluiten,

Als niet link.endswith(".gz" ):
         Als niet link in unscraped en niet link in scraped:
              unscraped.append(link)

Stap 4: E-mails exporteren naar een CSV-bestand

Om de resultaten beter te kunnen analyseren, exporteren we de e-mails naar een CSV-bestand.

df = pd.DataFrame(emails, columns=["Email"]) # vervang door kolomnaam van uw voorkeur
df.to_csv('email.csv', index=False)

Als je Google Colab gebruikt, kun je het bestand downloaden naar je lokale computer door

van google.colab importeer bestanden
bestanden.download("email.csv")

Zoals al is uitgelegd, kan ik de geschrapte e-mailadressen niet laten zien vanwege vertrouwelijkheidskwesties. 

[Disclaimer! Sommige websites staan niet toe om aan web scraping te doen en ze hebben zeer intelligente bots die je IP permanent kunnen blokkeren, dus scrapen op eigen risico].

Volledige 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 in E-mailadressen scrapen

Omdat bedrijven veel e-mailadressen nodig hebben om hun lijst met contactpersonen op te bouwen, is het noodzakelijk om gegevens uit meerdere bronnen te verzamelen. Het handmatig verzamelen van gegevens kan vervelend en tijdrovend zijn. In dit geval kiezen scrapers meestal voor proxies om het proces te versnellen en de beperkingen die op hen afkomen te omzeilen. Proxyscrape biedt proxies met hoge bandbreedte die onbeperkt gegevens kunnen schrapen en 24/7 werken om ononderbroken functionaliteit te garanderen. Hun proxy anonimiteitsniveau is hoog genoeg om de identiteit van de scrapers te verbergen. 

Veelgestelde vragen

1. Waarom is het nodig om e-mailadressen te scrapen?

Het maken van een potentiële contactlijst met gekwalificeerde e-mailadressen zal het proces van het bereiken van de doelgroep vergemakkelijken. Omdat de meeste mensen e-mail als communicatiemedium gebruiken, is het gemakkelijker om ze via e-mailadressen te bereiken. 

2. Hebben we proxies nodig voor het schrapen van e-mailadressen?

Bij het scrapen van e-mailadressen uit meerdere bronnen kunnen scrapers te maken krijgen met uitdagingen zoals IP-blokkades of geografische barrières. In dit geval zal proxies de adressen van gebruikers verbergen met het proxy adres en de blokkades voor toegang tot geblokkeerde websites opheffen. 

3. Is het legaal om e-mailadressen te scrapen? 

Het is altijd legaal om openbaar beschikbare gegevens te verzamelen. Scrapers moeten er dus voor zorgen dat de gegevens die ze verzamelen beschikbaar zijn in het publieke domein. Zo niet, dan kunnen ze gegevens verzamelen met voorafgaande toestemming om de legaliteit van het scrapen te behouden. 

Inpakken

In dit artikel hebben we nog een wonder van web scraping verkend door een praktisch voorbeeld te tonen van het schrapen van e-mailadressen. We hebben de meest intelligente aanpak geprobeerd door onze webcrawler met Python te maken en het is de eenvoudigste en toch krachtigste bibliotheek met de naam BeautfulSoup. Webscraping kan enorm nuttig zijn als het op de juiste manier wordt gedaan, rekening houdend met je vereisten. Hoewel we een zeer eenvoudige code hebben geschreven voor het scrapen van e-mailadressen, is deze volledig gratis en hoef je hiervoor niet afhankelijk te zijn van andere diensten. Ik heb mijn best gedaan om de code zoveel mogelijk te vereenvoudigen en heb ook ruimte voor maatwerk toegevoegd, zodat je de code kunt optimaliseren volgens je eigen vereisten. 

Als je op zoek bent naar proxy services om te gebruiken tijdens je scrapingprojecten, vergeet dan niet te kijken naar ProxyScrape residentiële en premium proxies