Tutorial sullo scraping del web con Python: Suggerimenti e trucchi

Pitone, Scraping, 05.12.20215 minuti di lettura

Con il web scraping è possibile estrarre automaticamente grandi quantità di dati dai siti web e salvarli in un database o in un file. I dati estratti possono essere per lo più memorizzati in un foglio di calcolo o in un formato tabellare. Il web scraping è anche chiamato web data extraction web harvesting. È necessario perché lo scraping manuale è un compito noioso.

Indice dei contenuti

Con il web scraping è possibile estrarre automaticamente grandi quantità di dati dai siti web e salvarli in un database o in un file. I dati estratti possono essere per lo più memorizzati in un foglio di calcolo o in un formato tabellare. Il web scraping è anche chiamato web data extraction web harvesting. È necessario perché lo scraping manuale è un'attività noiosa che può richiedere ore o addirittura giorni per essere completata. È quindi necessario automatizzare il processo ed estrarre i dati dai siti web in una frazione di tempo.

È possibile utilizzare un software di web scraping per caricare, strisciare ed estrarre automaticamente i dati dalle pagine multiple di un sito web in base alle proprie esigenze e ai propri requisiti. In breve, è possibile ottenere i dati desiderati dai siti web con un semplice clic. Nel mondo moderno, le aziende devono analizzare i dati ed eseguire azioni intelligenti. A volte, però, ottenere i dati dai siti web è difficile quando i proprietari utilizzano tecniche come i divieti IP e i CAPTCHA. Per ovviare a questo problema è possibile utilizzare i server proxy o le VPN, che aiutano a raccogliere i dati dal web in modo anonimo. 

Perché è necessario lo scraping del web?

Le aziende di tutto il mondo effettuano lo scraping di dati dal web per ottenere informazioni utili memorizzandole in un formato utilizzabile. Di seguito sono riportati alcuni dei vantaggi del web scraping in vari settori.

  • Il web scraping raccoglie insiemi di dati di addestramento e di test per i progetti di apprendimento automatico.
  • Nel commercio elettronico, il web scraping viene utilizzato per monitorare i prezzi della concorrenza.
  • Il web scraping viene utilizzato nel settore immobiliare per ottenere i dettagli della proprietà e del proprietario/agente.
  • Nel marketing, il web scraping viene utilizzato per creare elenchi telefonici e di e-mail per le attività di cold outreach.

Di seguito sono riportati i motivi principali per cui è necessario effettuare lo scraping di dati dal web.

Ottenere l'automazione - È possibile estrarre dati dai siti web utilizzando robusti web scrapers. In questo modo, si può risparmiare tempo dalle banali attività di raccolta dati. Con il web scraping è possibile raccogliere un volume di dati superiore a quello che un singolo essere umano può sperare di ottenere. Inoltre, è possibile creare sofisticati bot web per automatizzare le attività online utilizzando un linguaggio di programmazione come Python, Javascript o uno strumento di web scraping.

Set di dati ricchi e unici - È possibile ottenere da Internet una grande quantità di immagini, video, testi e dati numerici. È anche possibile trovare siti web pertinenti e creare set di dati personalizzati per l'analisi, a seconda dell'obiettivo. Ad esempio, siete interessati a comprendere a fondo il mercato sportivo del Regno Unito. È possibile impostare dei web scrapers per raccogliere i contenuti video o le informazioni sulle statistiche del calcio.

Gestione efficace dei dati - Non è necessario copiare e incollare i dati da Internet, perché con il web scraping è possibile raccogliere accuratamente i dati da vari siti web. In questo modo, la vostra azienda e i vostri dipendenti potranno dedicare più tempo al lavoro creativo grazie all'archiviazione efficace dei dati con software e programmi automatici.

Business Intelligence e approfondimenti - Il Web scraping da Internet consente di effettuare le seguenti operazioni:

  • Monitoraggio dell'attività di marketing della concorrenza
  • Ricerca dei prezzi della concorrenza
  • Costruire un quadro più ampio del proprio mercato

Inoltre, le aziende possono migliorare il processo decisionale scaricando, pulendo e analizzando i dati ad un volume significativo.

Velocità - Il web scraping estrae i dati dai siti web con grande velocità. Consente di effettuare lo scraping di dati in poche ore anziché in giorni. Tuttavia, alcuni progetti possono richiedere del tempo a seconda della loro complessità e delle risorse e degli strumenti che utilizziamo per realizzarli.

Accuratezza dei dati - L'estrazione manuale dei dati dai siti web comporta un errore umano che può causare gravi problemi. Pertanto, un'estrazione accurata dei dati è fondamentale per qualsiasi informazione, che può essere ottenuta con il web scraping.

Scraping del web in Python

Supponiamo di dover estrarre i dati da questo sito web. Dovrete installare i due moduli Python requests e BeautifulSoup. 

Importazione di librerie

È possibile installare questi moduli utilizzando il seguente comando.

pip installa le richieste
!pip installare BeautifulSoup

È possibile importare questi moduli come:

da bs4 importa BeautifulSoup
importare richieste

È possibile fare clic sul pulsante Ispeziona nell'angolo in alto a sinistra del sito web per evidenziare gli elementi che si desidera estrarre. Nel nostro caso, vogliamo estrarre i dati della tabella di questo sito, come mostrato di seguito.

Aggiungere intestazione e URL

È necessario aggiungere l'intestazione e l'URL alle richieste. L'intestazione può togliere la richiesta in modo che sembri provenire da un browser legittimo. 

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

url = "https://en.wikipedia.org/wiki/List_of_national_capitals"

È possibile utilizzare la funzione requests.get() per inviare una richiesta GET all'URL specificato.

r = requests.get(url, headers=intestazioni)

Oggetto BeautifulSoup

È necessario inizializzare un oggetto BeautifulSoup e citare i suoi parametri. Poi, bisogna estrarre tutte le righe della tabella. È possibile ottenere tutti gli elementi della tabella utilizzando il metodo find_all(), come mostrato nel codice seguente.

soup = BeautifulSoup(r.content, "html.parser")
table = soup.find_all('table')[1]
righe = table.find_all('tr')
row_list = list()

Iterazione tra le righe

È possibile utilizzare un ciclo for per iterare tutte le righe della tabella, come mostrato nel codice seguente.

per tr in righe:
   td = tr.find_all('td')
    riga = [i.text per i in td]
    row_list.append(row)

Creare un dataframe

È possibile visualizzare chiaramente i dati estratti se si crea un dataframe Pandas e si esportano i dati in un file .csv. Per creare un dataframe, è necessario importare Pandas, come mostrato di seguito.

importare pandas come pd

Ora è possibile convertire l'oggetto zuppa in un dataframe che conterrà le seguenti righe di tabella.

  • Città
  • Paese
  • Note

È possibile convertire il dataframe in formato csv e stampare il dataframe come mostrato di seguito.

df_bs = pd.DataFrame(row_list,colonne=['Città','Paese','Note'])
df_bs.set_index('Paese', inplace=True)
df_bs.to_csv('beautifulsoup.csv')
stampare(df_bs)

Si otterrà il seguente risultato.

Proxy per lo scraping del web con Python

Un proxy funge da intermediario tra un client e un server. Nasconde il vostro vero indirizzo IP e aggira i filtri e la censura. È possibile ottenere un elenco gratuito di proxy utilizzando semplicemente una funzione in Python, come mostrato nei passaggi seguenti.

Importazione di librerie

È necessario importare i seguenti moduli in Python.

da bs4 importa BeautifulSoup
importare richieste
importare random

Definire una funzione

Si può definire una funzione get_free_proxies() in cui si deve indicare l'URL dell'elenco di proxy gratuiti. Quindi, si deve creare un oggetto BeautifulSoup e ottenere la risposta HTTP utilizzando la funzione requests.get(). 

def get_free_proxies():
    url = "https://free-proxy-list.net/"
    soup = bs(requests.get(url).content, "html.parser")
    proxies = []

Utilizzare un ciclo For

È possibile utilizzare il metodo find_all() nel ciclo for per iterare tutte le righe della tabella, come mostrato di seguito.

for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

Elenco dei delegati di lavoro

È possibile citare l'elenco di alcuni proxy funzionanti, come quello menzionato di seguito.

proxy = [
    '167.172.248.53:3128',
   '194.226.34.132:5555',
   '203.202.245.62:80',
    '141.0.70.211:8080',
    '118.69.50.155:80',
    '201.55.164.177:3128',
   '51.15.166.107:3128',
   '91.205.218.64:80',
    '128.199.237.57:8080',
]

Sessione di richiesta

È necessario creare una funzione get_session() che accetti un elenco di proxy. Inoltre, crea una sessione di richieste che seleziona casualmente uno qualsiasi dei proxy passati, come mostrato nel codice sottostante.

def get_session(proxies):
  session = requests.Session()
  proxy = random.choice(proxies)
  session.proxies = {"http": proxy, "https": proxy}
  return session

Fare una richiesta

È possibile utilizzare un ciclo for per effettuare una richiesta a un sito web e ottenere in cambio un indirizzo IP.

per i in range(5):
    s = get_session(proxy)
    prova:
       print("Richiesta pagina con IP:", s.get("http://icanhazip.com", timeout=1.5).text.strip())
    except Exception as e:
        continua

Si ottiene il seguente risultato.

Perché i proxy sono importanti per lo scraping del Web?

Le aziende possono estrarre dati preziosi per prendere decisioni basate sui dati e offrire servizi basati sui dati con il web scraping. I proxy sono importanti per lo scraping del Web per i seguenti motivi.

  • Con i proxy, è possibile effettuare richieste da una particolare regione geografica e vedere il contenuto specifico che il sito web visualizza per quella determinata località. Questa caratteristica dei proxy è utile quando si effettua lo scraping dei dati dei prodotti dai rivenditori online.
  • I proxy consentono di effettuare un volume maggiore di richieste a un sito web di destinazione senza essere bloccati o vietati.
  • I proxy consentono di effettuare il crawling dei dati dai siti web in modo più affidabile ed efficiente.
  • Con i proxy è possibile effettuare sessioni simultanee illimitate allo stesso sito web o a siti diversi senza il timore di essere bannati.
  • Un proxy nasconde l'indirizzo IP del computer al sito web di destinazione, garantendo così una maggiore sicurezza al dispositivo.
  • Le aziende utilizzano i proxy per monitorare i prezzi e le caratteristiche dei prodotti della concorrenza e migliorare i propri servizi e prodotti.

Conclusione di questo tutorial su Python per lo scraping del web

Finora abbiamo detto che il web scraping ci aiuta a estrarre i dati dai siti web in modo automatico. È possibile convertire i dati in un formato utilizzabile come un file .csv. Le aziende utilizzano il web scraping per verificare i prezzi e le caratteristiche dei prodotti della concorrenza. Il web scraping è molto utile se si utilizzano i proxy, che mantengono anonima la vostra identità nascondendo il vostro indirizzo IP originale dal sito web di destinazione. Con i proxy, è possibile inviare più richieste al sito web senza il timore di essere bloccati o vietati.