Scraping di indirizzi e-mail con Python - Guida definitiva 2024

Pitone, Scraping, Mar-06-20245 minuti di lettura

Possedere un elenco di potenziali clienti via e-mail può aiutare i marketer a scalare le loro attività. Grazie allo scraping degli indirizzi e-mail tramite script Python, gli imprenditori possono raggiungere meglio il proprio pubblico. MailButler.io afferma che ci sono quasi 4,3 miliardi di utenti di posta elettronica a livello globale, che si stima raggiungeranno i 4,6 miliardi entro il 2025. Queste statistiche dicono che le persone

Possedere un elenco di potenziali clienti via e-mail può aiutare i marketer a scalare le loro attività. Grazie allo scraping degli indirizzi e-mail con gli script Python, gli imprenditori possono raggiungere meglio il loro pubblico. 

MailButler.io afferma che ci sono quasi 4,3 miliardi di utenti di e-mail a livello globale, che si stima raggiungeranno i 4,6 miliardi entro il 2025. Queste statistiche dicono che le persone si affidano principalmente alla piattaforma di posta elettronica per la loro modalità di comunicazione ufficiale. Questo articolo vi guiderà attraverso il processo di scraping degli indirizzi e-mail utilizzando il linguaggio python. 

Indice dei contenuti

Scraping di indirizzi e-mail con Python

Uno dei modi più semplici per avere una buona clientela è quello di avere il maggior numero possibile di indirizzi e-mail aziendali e di inviare loro di volta in volta i dettagli del vostro servizio. Su Internet sono presenti molti strumenti di scraping che forniscono questi servizi gratuitamente, ma hanno limiti di prelievo dei dati. Offrono anche limiti di estrazione dei dati illimitati, ma sono a pagamento. Perché pagarli quando potete costruirne uno con le vostre mani? Vediamo i passaggi per costruire uno strumento di scraping di qualità utilizzando Python. 

Articoli correlati

I migliori strumenti di scraping web in Python 

Come creare un proxy in Python

Passi per la raschiatura degli indirizzi e-mail

Anche se si tratta di un esempio molto semplice per i principianti, sarà un'esperienza di apprendimento, soprattutto per coloro che sono alle prime armi con il web scraping. Questo sarà un tutorial passo dopo passo che vi aiuterà a ottenere indirizzi e-mail senza alcun limite. Iniziamo con il processo di costruzione del nostro web scraper intelligente.

Passo 1: Importare i moduli

Per il nostro progetto utilizzeremo i seguenti sei moduli.

importare re
importare richieste
da urllib.parse import urlsplit
da collections import deque
da bs4 import BeautifulSoup
importare pandas come pd
da google.colab importare file

Di seguito sono riportati i dettagli dei moduli importati:

re è per la corrispondenza con le espressioni regolari.requests per l'invio di richieste HTTP.urlsplit per dividere gli URL in parti componenti.deque è un contenitore che ha la forma di un elenco usato per l'aggiunta e il prelievo da entrambe le estremità.BeautifulSoup per estrarre i dati dai file HTML di diverse pagine web.pandas per la formattazione delle e-mail in DataFrame e per ulteriori operazioni.

Passo 2: Inizializzazione delle variabili

In questa fase, inizializzeremo un deque che salverà gli URL raschiati, gli URL non raschiati e una serie di e-mail di salvataggio raschiate con successo dai siti web.

# leggere l'url dall'input
original_url = input("Inserisci l'url del sito web: ") 
 
# per salvare gli url da scrapare
unscraped = deque([original_url])
 
# per salvare gli url scrapati
scraped = set()
 
# per salvare le email recuperate
emails = set()  

Gli elementi duplicati non sono ammessi in un insieme, quindi sono tutti unici.

Fase 3: avvio del processo di scraping

Il primo passo consiste nel distinguere tra gli URL scraped e quelli non scraped. Il modo per farlo è spostare un URL da unscraped a scraped.

while len(unscraped):
    # sposta unsraped_url nel setscraped_urls
    url = unscraped.popleft() # popleft(): Rimuove e restituisce un elemento dal lato sinistro della deque
    scraped.add(url)

Il passo successivo consiste nell'estrarre i dati da diverse parti dell'URL. A tale scopo, utilizzeremo urlsplit.

parti = urlsplit(url)

urlsplit() restituisce una 5-tupla: (schema di indirizzamento, posizione in rete, percorso, query, frammento, identificatore).

Non posso mostrare esempi di input e output per urlsplit() per motivi di riservatezza, ma una volta provato, il codice chiederà di inserire un valore (indirizzo del sito web). L'output mostrerà SplitResult() e all'interno di SplitResult() ci saranno cinque attributi.

Questo ci permetterà di ottenere la base e il percorso dell'URL del sito web.

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

È il momento di inviare la richiesta HTTP GET al sito web.

try:
        response = requests.get(url)
    except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
        # ignora le pagine con errori e continua con l' url successivo 
       continuare

Per estrarre gli indirizzi e-mail utilizzeremo l'espressione regolare e li aggiungeremo al set di e-mail.

# È possibile modificare l'espressione regolare in base alle proprie esigenze.
    new_emails = s et(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.com", 
                 response.text, re.I)) # re.I: (ignora il caso)
    emails.update(new_emails)

Le espressioni regolari sono di grande aiuto quando si vogliono estrarre informazioni di propria scelta. Se non siete pratici di queste espressioni, potete dare un'occhiata a Python RegEx per maggiori dettagli.

Il passo successivo consiste nel trovare tutti gli URL collegati al sito web.

# crea una bella zuppa per il documento 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.

per ancora in soup.find_all("a"): 
        
       # estrae l'url collegato dall'ancora
        se "href" in anchor.attrs:
          link = anchor.attrs["href"]
        else:
          link = ''
        
       # risolvere i link relativi (che iniziano con /)
        if link.startswith('/'):
            link = base_url + link
            
        elif not link.startswith('http'):
            link = percorso + link

Quindi troveremo i nuovi URL e li aggiungeremo alla coda degli unscraped se non sono presenti né negli scraped né negli unscraped.

Provando il codice da soli, si noterà che non tutti i link sono in grado di essere raschiati, quindi è necessario escluderli,

se non link.endswith(".gz" ):
         se non link in unscraped e non link in scraped:
              unscraped.append(link)

Passo 4: Esportazione delle e-mail in un file CSV

Per analizzare meglio i risultati, esporteremo le e-mail in un file CSV.

df = pd.DataFrame(emails, columns=["Email"]) # sostituire con il nome della colonna che si preferisce
df.to_csv('email.csv', index=False)

Se si utilizza Google Colab, è possibile scaricare il file sul computer locale tramite

da google.colab import file
files.download("email.csv")

Come già spiegato, non posso mostrare gli indirizzi e-mail scartati per questioni di riservatezza. 

[Disclaimer! Alcuni siti web non permettono di fare web scraping e hanno bot molto intelligenti che possono bloccare permanentemente il vostro IP, quindi fate scraping a vostro rischio e pericolo].

Codice completo

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

Proxy nello scraping di indirizzi e-mail

Poiché le aziende hanno bisogno di numerosi indirizzi e-mail per costruire la loro lista di contatti, è necessario raccogliere i dati da più fonti. Il processo di raccolta manuale dei dati può essere noioso e richiede molto tempo. In questo caso, gli scrapers di solito scelgono i proxy per accelerare il processo e aggirare le restrizioni che si presentano. Proxyscrape fornisce proxy ad alta larghezza di banda che sono in grado di scrapare dati illimitati e funzionano 24 ore su 24, 7 giorni su 7, per garantire una funzionalità ininterrotta. Il livello di anonimato del proxy è sufficientemente alto da nascondere l'identità degli scrapers. 

Domande frequenti

1. Perché è necessario raccogliere gli indirizzi e-mail?

La creazione di una lista di contatti potenziali con indirizzi e-mail qualificati faciliterà il processo di raggiungimento del pubblico target. Poiché la maggior parte delle persone utilizza l'e-mail come mezzo di comunicazione, è più facile raggiungerle attraverso gli indirizzi e-mail. 

2. Abbiamo bisogno di proxy per lo scraping degli indirizzi e-mail?

Durante lo scraping degli indirizzi e-mail da più fonti, gli scrapers possono trovarsi di fronte ad alcune sfide come i blocchi IP o le barriere geografiche. In questo caso, i proxy nascondono gli indirizzi degli utenti con l'indirizzo proxy e rimuovono i blocchi nell'accesso ai siti web bloccati. 

3. È legale raccogliere gli indirizzi e-mail? 

È sempre legale raccogliere dati disponibili al pubblico. Pertanto, gli scrapers devono assicurarsi che i dati che stanno raccogliendo siano disponibili nel pubblico dominio. In caso contrario, possono raccogliere i dati previa autorizzazione per mantenere la legalità dello scraping. 

Conclusione

In questo articolo abbiamo esplorato un'altra meraviglia del web scraping mostrando un esempio pratico di scraping di indirizzi e-mail. Abbiamo tentato l'approccio più intelligente realizzando il nostro web crawler con Python, la libreria più semplice e allo stesso tempo più potente, chiamata BeautfulSoup. Il web scraping può essere di grande aiuto se fatto nel modo giusto, considerando le vostre esigenze. Anche se abbiamo scritto un codice molto semplice per lo scraping degli indirizzi e-mail, è totalmente gratuito e non è necessario affidarsi ad altri servizi. Ho fatto del mio meglio per semplificare il codice il più possibile e ho anche aggiunto spazio per la personalizzazione, in modo che possiate ottimizzarlo in base alle vostre esigenze. 

Se siete alla ricerca di servizi proxy da utilizzare durante i vostri progetti di scraping, non dimenticate di dare un'occhiata a ProxyScrape residential e premium proxies