Introduzione al Web Scraping
Parliamo di……Scraping
La necessità di “raschiare i siti Web” è arrivata con la diffusione di Internet, dove ogni giorno vengono condivisi contenuti e molti dati. I primi web scaper famosi sono stati inventati dagli sviluppatori dei motori di ricerca (come Google o AltaVista). Questi scraper attraversano (quasi) l’intera Internet, scansionano ogni pagina web, estraggono informazioni da essa e costruiscono un indice in cui tutti noi possiamo cercare.
Non tutti, al contrario,sanno che a loro volta possono implementare uno scraper. Non mi sto certo riferendo a qualcosa che possa fare concorrenza a Google ma, restringendo gli ambiti a poche pagine web, estrarre le informazioni che ci interessano in modo strutturato, importandole, magari ,in un database o nei file di tipo (JSON, CSV, XML, fogli Excel).
Perchè fare scraping?
Ci sono molti casi in cui fare uso di web scraping può tornare utile.
Uno dei motivi principali è estrarre informazioni da un sito web come, per esempio, l’elenco dei prodotti venduti da un’azienda,i dati nutrizionali di generi alimentari, i risultati di eventi sportivi.La maggior parte di questi progetti è propedeutico di attività di analisi dei dati, dove la raccolta manuale delle informazioni è un processo oneroso dal punto di vista temporale ed anche soggetto a numerosi errori.
A volte,inoltre, dobbiamo implementare progetti in cui estrarre dati da un sito web per poi caricarli in un altro, cioè una migrazione.
Teoricamente, addirittura, potremmo scaricare l’intero Web! Non è impossibile, iniziando da un sito per poi seguirne tutti i link presenti.
Non ti consiglio di iniziare questo progetto perché , sicuramente, non avresti spazio su disco sufficiente per contenere l’intero Web, ma l’idea è, senza alcun dubbio,interessante!! Fammi sapere se ti vorrai cimentare in un esperimento di tale portata!
Problemi di scraping.
Una delle parti più difficili della raccolta di dati tramite i siti Web è che siti web differiscono. Intendo non solo nei dati ma anche nel layout. È difficile
creare un web scraping adatto a tutti perché ogni sito Web ha un diverso layout, utilizza codici HTML diversi (o nessun) per identificare i campi e così via.
E se ciò non bastasse, molti siti web cambiano layout frequentemente. Se ciò accade, il tuo programma di scraping non funziona più come prima.
In questi casi, l’unica opzione è rivisitare il codice e adattarlo alle modifiche del sito web di destinazione.
Impareremo gli strumenti di base che Python mette a disposizione per fare web scraping.
Presto ti renderai conto di quanto sia difficile creare una scraper da zero..
Ma Python ha una grande comunità e sono disponibili molti progetti per aiutarti a concentrarti sulla parte importante del tuo scraper: l’estrazione dei dati.
Vedremo quindi,come si utilizzano strumenti ( librerie) come Request, Beautiful Soup e Scrapy.
Come installare BeautifulSoup
Andremo ad utilizzare una libreria per il web scraping chiamata BeautifulSoup, ma esistono librerie alternative che possono essere utilizzate (per esempio scrapy). Inoltre, per seguire l’esempio successivo dovrete installare anche la libreria “requests” che serve per eseguire richieste HTTP attraverso codice Python.
pip install beautifulsoup4
Mentre per installare requests:
pip install requests
Come ottenere il contenuto di una pagine HTML attraverso codice Python
Per questo esempio andremo ad ottenere i dati delle previsioni metereologiche per Milano dal sito ilmeteo.it Ovviamente questo non è il metodo migliore per ottenere dati delle previsioni meteo, ma questo è solo un esempio.
import requests
from bs4 import BeautifulSoup as bs
r = requests.get(“https://www.ilmeteo.it/meteo/Milano”)
contenuto = bs(r.text)
temps = contenuto.findAll(“span”, {“class”: “tmax”})
for temp in temps:
print(temp.text)
Il risultato è il seguente:
ESEMPIO 2
Troviamo titolo e indici per la pagina https://it.wikipedia.org/wiki/Hello_world
from bs4 import BeautifulSoup import requests main_url = "https://it.wikipedia.org/wiki/Hello_world" req = requests.get(main_url) soup = BeautifulSoup(req.text, "html.parser") # trovo il titolo principale H1. title = soup.find("h1", class_ = "firstHeading") print (" il titolo H1 è " + title.get_text()) # Troviamo l'indice mid_titles = [tag.get_text() for tag in soup.find_all("span", class_ = "mw-headline")] print( "Indice ") print( mid_titles) # ora usando i selettori CSS troviamo i link degli articoli print( "Paragrafi") links_tags = soup.select("li.toclevel-1") for tag in links_tags: print (tag.a.get("href")) Il risultato è il seguente:
[elementor-template id=”12586″]
(572)