Web scraping is a technique that allows extracting and processing large amounts of unstructured data from the web through automated scripts that analyze the HTML structure of pages to identify and acquire the desired information; it allows quickly obtaining large amounts of online data for research, monitoring and data analytics, for example by extracting all prices and descriptions from an e-commerce site; the core Python libraries for scraping are Requests to download page content, BeautifulSoup to analyze HTML, and Selenium to handle dynamic pages with JavaScript; with BeautifulSoup it is possible to navigate the HTML as a tree of objects, searching and finding elements through tags, id, class and attributes; for scraping sites with multiple pages, loops can be used that visit each URL in automatic sequence; by adopting best practices with these tools it is possible to create effective, scalable and automated scraping scripts to extract and process large volumes of unstructured data for research, monitoring and data analytics purposes.
Il web scraping è una tecnica fondamentale per raccogliere ed elaborare grandi quantità di dati dal web. In questo articolo analizzeremo in dettaglio i concetti chiave, le migliori pratiche e gli strumenti necessari per iniziare a fare web scraping in modo efficace.
Cos’è il web scraping
Il web scraping consiste nell’estrarre e raccogliere dati da pagine web tramite script automatizzati. Funziona analizzando la struttura HTML delle pagine per identificare e acquisire le informazioni desiderate.
Il principale vantaggio dello scraping è la possibilità di ottenere velocemente un grande volume di dati non strutturati da fonti online per scopi di ricerca, monitoraggio, data analytics. Ad esempio, è possibile estrarre tutti i prezzi e le descrizioni da un e-commerce per analizzarne le dinamiche nel tempo.
Preparazione dell’ambiente
Per iniziare a fare web scraping in Python, è necessario installare alcune librerie fondamentali:
- Requests: permette di scaricare il contenuto HTML delle pagine web
- Beautiful Soup: analizza l’HTML e permette di estrarre facilmente dati selezionati
- Selenium: per interagire con pagine web dinamiche che richiedono l’esecuzione di codice JavaScript
Si possono installare tramite il comando pip:
pip install requests beautifulsoup4 selenium
Scraping di base con Requests e BeautifulSoup
Importiamo le librerie necessarie:
import requests
from bs4 import BeautifulSoup
Scarichiamo il contenuto HTML di una pagina con Requests:
url = 'https://example.com'
response = requests.get(url)
Analizziamolo con BeautifulSoup per estrarre il titolo e i paragrafi:
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.text
paragraphs = soup.find_all('p')
E scriviamo i dati estratti su file CSV per un’ulteriore elaborazione:
import csv
with open('output.csv', 'w') as file:
writer = csv.writer(file)
writer.writerow([title])
for p in paragraphs:
writer.writerow([p.text])
Navigazione nella struttura HTML
BeautifulSoup mette a disposizione una serie di metodi per scorrere ed esplorare l’HTML come albero ad oggetti:
- find() ricerca il primo elemento corrispondente
- find_all() restituisce tutti gli elementi corrispondenti
Ad esempio, per estrarre tutti i link di una pagina:
links = soup.find_all('a')
for link in links:
print(link['href'])
È possibile ricercare elementi tramite id, classe o altri attributi per individuare precisamente i dati desiderati.
Scraping di pagine JavaScript dinamiche
Molti siti web moderni utilizzano JavaScript per generare contenuti e pagine dinamicamente. In questi casi, è necessario Selenium, che consente di controllare un browser web per interagire pienamente con le pagine.
Ad esempio, per caricare una pagina dinamica e cliccare su un pulsante prima di scaricarne il contenuto:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)
button = driver.find_element_by_id('load-more')
button.click()
html = driver.page_source
soup = BeautifulSoup(html)
Gestione di pagine multiple
Per scaricare dati da siti web con più pagine, è possibile realizzare script che visitano ogni URL utilizzando cicli e paginazione automatica.
Ad esempio, per estrarre prodotti da un e-commerce con più pagine:
import requests
from bs4 import BeautifulSoup
base_url = 'https://example.com/products?page='
final_page = 10
for x in range(1, final_page+1):
print(f'Page {x}')
url = base_url + str(x)
response = requests.get(url)
soup = BeautifulSoup(response.text)
products = soup.find_all('div', class_='product')
for product in products:
name = product.find('h2').text
print(name)
Come abbiamo visto, il web scraping è una tecnica potente che permette di ottenere ed elaborare grandi moli di dati non strutturati da fonti online. Requisiti fondamentali sono librerie come Requests, BeautifulSoup e Selenium, che consentono di automatizzare il processo di estrazione dati anche da pagine web complesse e dinamiche. Adottando le migliori pratiche illustrate e una strategia strutturata, è possibile realizzare script di scraping efficaci e scalabili per progetti di data analytics, monitoraggio, ricerca e altro ancora.