logo
languageITdown
menu

Guida per Principianti: Come Fare Web Scraping con Python

6 minuti di lettura

Per molti, Python è la prima parola che viene in mente quando si parla di web scraping. Ha perfettamente senso, visto che tutti i software e le API di scraping sono comparsi solo negli ultimi 2-3 anni. Se preferisci estrarre dati nel modo tradizionale – e allo stesso tempo più flessibile – allora questo articolo può offrirti l’assistenza più completa.

Cos’è un Web Scraper?

Immagina Internet come una biblioteca gigantesca. Un bibliotecario usa un sistema per trovare i libri. Allo stesso modo, uno scraper (o spider) naviga in rete per raccogliere informazioni dai siti web. Perché è importante? Perché nel nostro mondo guidato dai dati, la capacità di estrarre e analizzare informazioni può portare a decisioni migliori nel business, nella ricerca e nella tecnologia, permettendo di ottenere un vantaggio competitivo o di conquistare il mercato in anticipo.

Esistono due modi principali per eseguire il web scraping: tramite codice e senza programmazione. Quindi, sviluppatore o meno, qualcosa da questo articolo te lo porterai sicuramente a casa.

Cos’è Python?

Python è uno dei linguaggi di programmazione: semplice ma potente, adatto ai principianti ma anche abbastanza robusto per i professionisti. Anche se è facile da leggere e capire, gestisce automaticamente molti aspetti complessi della programmazione. È per questo che molte persone scelgono Python per iniziare a programmare, specialmente quando si tratta di fare scraping di siti web.

Perché Usare Python per il Web Scraping?

Python ha diverse librerie progettate per semplificare lavoro come lo scraping web. Le librerie sono raccolte di codice pre-scritto che possiamo utilizzare per eseguire operazioni specifiche. Nel caso dello scraping, librerie come BeautifulSoup e Scrapy possono risparmiarci la fatica di creare uno scraper da zero.

Come Costruire uno Scraper con Python (esempio incluso)

Se preferisci una soluzione senza programmazione, scorri verso il basso alla sezione Alternativa Senza Programmazione: i Modelli di Scraping Octoparse

Ecco il viaggio dei coraggiosi:

1. Prepara l’ambiente Python

Prima di iniziare a scrivere il codice, assicurati di avere Python e pip (il gestore dei pacchetti di Python) installati sul tuo computer.

  • Installa Python: Scaricalo e installalo da python.org.
  • Installa le librerie necessarie: Apri il terminale o prompt dei comandi e installa BeautifulSoup e requests con pip. Queste librerie aiuteranno a effettuare richieste HTTP e ad analizzare documenti HTML.
pip install beautifulsoup4 requests

2. Identifica i dati desiderati

Ad esempio, dalle Pagine Gialle potresti voler raccogliere nomi delle aziende, indirizzi, numeri di telefono o URL dei siti web. Avere le idee chiare su cosa cercare ti aiuterà a concentrarti sugli elementi giusti del codice HTML estratto.

3. Scrivi lo script di web scraping

Una volta configurato l’ambiente, puoi iniziare a programmare lo scraper. Ecco un processo passo a passo:

  • Importa le librerie: Per prima cosa, importa le librerie necessarie nel tuo script Python.
import requests
from bs4 import BeautifulSoup
  • Esegui una richiesta HTTP: Utilizza la libreria requests per inviare una richiesta GET al sito web che desideri scansionare. Sostituisci “https://example.com” con l’URL del sito web che hai l’autorizzazione per fare scraping.
url = 'https://example.com'
response = requests.get(url, headers=headers)
response.raise_for_status()  # Verifica che la richiesta sia andata a buon fine

Nell’esempio di Pagine Gialle, possiamo sostituire l’URL predefinito ‘https://example.com’ con ‘https://www.paginegialle.it/ricerca/ristoranti/Roma’

import requests

url = 'https://www.paginegialle.it/ricerca/ristoranti/Roma'

response = requests.get(url, headers=headers)
response.raise_for_status()  # Verifica che la richiesta sia andata a buon fine
  • Analizza il contenuto HTML: Utilizza BeautifulSoup per analizzare il contenuto HTML recuperato. Dopodiché, puoi navigare e cercare nell’HTML i dati desiderati.
soup = BeautifulSoup(response.text, 'html.parser')
  • Estrai i dati specifici:

Ad esempio, In Yellow Page, se stai cercando nomi di aziende e informazioni di contatto, potresti cercare attributi di classe specifici che racchiudono questi dati.

businesses = soup.find_all('div', class_='js-card-content')

estratti = []
for business in businesses:
    name_tag = business.find('h2', class_='js-card-title')
    address_tag = business.find('div', class_='js-card-address')
    phone_tag = business.find('a', class_='js-phone-link')

    name = name_tag.text.strip() if name_tag else 'Nessun Nome'
    address = address_tag.text.strip() if address_tag else 'Nessun Indirizzo'
    phone = phone_tag.text.strip() if phone_tag else 'Nessun Telefono'

    print(name, address, phone)
    estratti.append({'Nome': name, 'Indirizzo': address, 'Telefono': phone}))

4. Salva i dati estratti

Puoi usare Pandas per salvare i dati in formato CSV:

import pandas as pd

df = pd.DataFrame(estratti)
df.to_csv('dati_pagine_gialle.csv', index=False)

5. Gestisci gli errori possibili

Utilizza i blocchi try-except per gestire le eccezioni:

try:
response = requests.get(url, headers=headers)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
businesses = soup.find_all('div', class_='js-card-content')
if not businesses:
print("Nessuna attività trovata.")
except requests.RequestException as e:
print(f"Errore nella richiesta: {e}")
except Exception as e:
print(f"Errore imprevisto: {e}")

Problemi Comuni e Soluzioni

Eseguire scraping con Python non è così semplice, potresti incontrare qualche ostacolo:

1. Blocco IP e CAPTCHA

I siti web possono bloccare il tuo indirizzo IP se rilevano un traffico insolito o eccessivo proveniente da una singola fonte, interpretandolo spesso come comportamento abusivo. Talvolta vengono anche utilizzati CAPTCHAs per verificare se sei un essere umano o un bot.

Soluzioni:

  • Proxy: i proxy possono essere utilizzati per instradare le tue richieste tramite indirizzi IP differenti. Con il carico distribuito, le tue richieste appariranno più naturali. Esistono molte piattaforme che offrono proxy a pagamento. Inoltre, puoi usare la libreria requests di Python per creare una lista di proxy e ruotarli a ogni richiesta.
import requests

proxy_list = ['http://10.10.1.10:3128', 'https://10.10.1.11:1080', ...]
url = 'https://example.com'

for proxy in proxy_list:
    try:
        response = requests.get(url, proxies={"http": proxy, "https": proxy})
        # Process the response
    except requests.exceptions.ProxyError:
        continue  # Try the next proxy
  • Rotazione degli User-Agent: Variare lo user-agent può aiutare a camuffare il tuo scraper come un normale browser. Librerie come fake_useragent possono generare user-agent casuali e realistici, riducendo la possibilità di essere bloccati.
from fake_useragent import UserAgent
ua = UserAgent()

headers = {'User-Agent': ua.random}
response = requests.get(url, headers=headers)

2. Velocità ed Efficienza

Se invii troppe richieste in un breve periodo, il sito web può essere sovraccaricato, rallentando i tempi di risposta sia per il sito stesso che per il tuo scraper. Inoltre, aumenta il rischio di essere bannati.

Soluzioni:

  • Rate Limiting: Prova a introdurre ritardi tra le richieste per ridurre il carico sul server del sito web. Ad esempio, puoi usare time.sleep() di Python per aggiungere delle pause.
import time

for url in urls:
    response = requests.get(url)
    time.sleep(1)  # Pause for 1 second between requests
  • Richieste asincrone (async): Consentono di gestire più richieste in modo efficiente senza bloccare l’esecuzione del programma. Consulta la libreria aiohttp a riguardo.
import aiohttp
import asyncio

async def fetch(url, session):
    async with session.get(url) as response:
        return await response.text()

async def fetch_all(urls):
    async with aiohttp.ClientSession() as session:
        tasks = [fetch(url, session) for url in urls]
        return await asyncio.gather(*tasks)

urls = ['https://example.com/data1', 'https://example.com/data2', ...]
asyncio.run(fetch_all(urls))

3. Rispetto del file robots.txt

Il file robots.txt di un sito web specifica quali parti del sito possono essere visitate dai bot. Ignorare queste regole può portare a problemi legali o a un ban.

Soluzioni:

  • Controllo manuale del robots.txt: Prima di iniziare lo scraping, controlla manualmente il file robots.txt del sito (es. https://www.paginegialle.it/robots.txt) per verificare se è consentito accedere alle sezioni che ti interessano.
  • Automatizzare il rispetto delle regole: Puoi usare librerie come robotparser in Python per leggere e interpretare automaticamente il file robots.txt, assicurandoti che il tuo scraper segua le regole specificate.
import urllib.robotparser

rp = urllib.robotparser.RobotFileParser()
rp.set_url('

Alternativa Senza Programmazione: i Modelli di Scraping Octoparse

Se i linguaggi di programmazione ti fanno girare la testa, forse il metodo con codice non fa per te. Ma non ti preoccupare, esistono vari modi per ottenere i tuoi dati. Sono disponibili modelli pre-costruiti offerti da Octoparse che possono soddisfare le tue esigenze con pochi clic e parametri, ad esempio per le Pagine Gialle.

https://www.octoparse.it/template/crawler-lista-aziende-paginegialle

Come Funziona:

  • Seleziona il modello Crawler di lista di negozi su Pagine Gialle
  • Inserisci parametri come parola chiave e località
  • Clicca su Inizia
  • Esporta i dati nei formati desiderati: Excel, CSV, HTML, JSON, XML, o anche Google Sheet, MySQL, SQL Server.

Conclusione

Speriamo che questo articolo ti abbia aiutato a raccogliere i dati che ti servono. Che tu scelga di usare codice, API o software, assicurati di farlo in modo responsabile, rispettando la privacy, la legalità e i diritti dei proprietari dei dati. Se non sei sicuro, usa strumenti come Octoparse, conforme al GDPR. Per le informazioni protette, Octoparse ne impedirà l’accesso, evitandoti problemi legali. Così puoi concentrarti su ciò che conta davvero!

Ottieni Dati dal Web in Pochi Clic
Estrai facilmente dati da qualsiasi sito web senza codifica.
Download Gratuito

Articoli popolari

Esplora argomenti

Inizia a usare Octoparse oggi

Scarica

Articoli correlati