Spiegazione codice in Python


PRENDERE EMAIL DALLE PAGINE GIALLE

Per prima cosa bisogna importare i pacchetti che ci serviranno durante il progetto, nel caso queste non siano già state installate occorre scaricarle con il comando pip install pkg_name

In [1]:
import requests
import pandas as pd
from bs4 import BeautifulSoup

Per seconda cosa chiamiamo lavori il nome della mansione che dobbiamo cercare, zone la città o il luogo dove dobbiamo cercare le mail ed infine creiamo una lista che chiamiamo database_scar per poi inserire all'interno le mail della società e le informazioni.

In [2]:
lavori = 'carrozzeria'
zone = 'milano'
database_scar = []

Infine facciamo la parte di ricerca delle mail che consiste nel ricercare per ogni pagina relativamente alla ricerca della mansione e della zona tutti coloro i quali si sono registrati inserendo il sito web per poi andare ad ricercare all'interno del sito web la mail ricercando all'interno dei link inseriti all'interno del sito il mailto.

In tutto questo utilizziamo molte volte il try per evitare gli errori 404, 403 e anche eventuali errori di blocco da parte del sito per i troppi accessi.

In [3]:
for i in range(1, 2000):
    url = "https://www.paginegialle.it/ricerca/" + lavori.replace(" ","%20") + "/" + zone.replace(" ","%20")+"/p-"+str(i)
    try:
        response = requests.get(url)
    except:
        response = "<Response [403]>"
    if str(response) == "<Response [200]>":
        soup = BeautifulSoup(response.text, "html.parser")
        all_links = [a['href'] for a in soup.find_all('a', class_="btn btn-black icn-sitoWeb shinystat_ssxl")]
        for company_link in all_links:
            try:
                response = requests.get(company_link)
            except:
                response = "<Response [403]>"
            if str(response) == "<Response [200]>":
                soup = BeautifulSoup(response.text, "html.parser")
                try:
                    mail = str([a['href'][7:].lower() for a in soup.find_all('a') if a['href'][:7].lower()=='mailto:'][-1])
                    if len(mail) > 5:
                        database_scar.append([company_link, mail, lavori, zone])
                except:
                    pass

Salviamo i dati in formato csv:

In [4]:
df = pd.DataFrame(database_scar, columns=["Sito-web","Email","Tipo di struttura","Luogo"])
df.to_csv('mail_scaricate.csv')