logo proxyscrape scuro

Web Scraping per principianti: Nozioni di base e struttura con Python

Pitone, Scraping, Marzo-01-20215 minuti di lettura

Il web scraping è l'arte di estrarre dati da un sito web in forma automatica e ben strutturata. Ci possono essere diversi formati per lo scraping dei dati, come excel, CSV e molti altri. Alcuni casi d'uso pratici del web scraping sono le ricerche di mercato, il monitoraggio dei prezzi, la price intelligence, le ricerche di mercato e la lead generation. Il web scraping è una tecnica strumentale per utilizzare al meglio i dati disponibili al pubblico e prendere decisioni più intelligenti. È quindi importante che tutti conoscano almeno le basi del web scraping per trarne vantaggio.

Questo articolo tratterà le basi del web scraping giocando con il framework di Python chiamato Beautiful Soup. Utilizzeremo Google Colab come ambiente di codifica.

Fasi del Web Scraping con Python

  1. Prima di tutto, è necessario identificare la pagina web che si desidera raschiare e inviare una richiesta HTTP a tale URL. In risposta, il server restituisce il contenuto HTML della pagina web. Per questo compito, utilizzeremo una libreria HTTP di terze parti per gestire le richieste in python.
  2. Una volta ottenuto l'accesso al contenuto HTML, il compito principale è quello di analizzare i dati. Non possiamo elaborare i dati semplicemente attraverso l'elaborazione delle stringhe, poiché la maggior parte dei dati HTML sono annidati. È qui che entra in gioco il parser, che crea una struttura ad albero dei dati HTML. Una delle librerie di parser HTML più avanzate è html5lib.
  3. Segue l'attraversamento dell'albero, che comporta la navigazione e la ricerca nell'albero di parse. A questo scopo, utilizzeremo Beautiful Soup (una libreria python di terze parti). Questa libreria Python è utilizzata per estrarre dati da file HTML e XML.

Ora abbiamo visto come funziona il processo di web scraping. Cominciamo con la codifica,

Passo 1: Installazione di librerie di terze parti

Nella maggior parte dei casi, Colab viene fornito con pacchetti di terze parti già installati. Tuttavia, se le dichiarazioni di importazione non funzionano, è possibile risolvere il problema installando alcuni pacchetti con i seguenti comandi, 

pip installa le richieste
pip installare html5lib
pip installare bs4
Fase 2: Accesso al contenuto HTML della pagina web
importare le richieste 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
print(r.content)

Visualizza l'output del modulo,

Cerchiamo di capire questo pezzo di codice,

  1. Nella prima riga di codice, importiamo la libreria requests.
  2. Quindi si specifica l'URL della pagina web che si vuole raschiare.
  3. Nella terza riga di codice, si invia la richiesta HTTP all'URL specificato e si salva la risposta del server in un oggetto denominato r.
  4. Infine print(r.content) restituisce il contenuto HTML grezzo della pagina web.
Fase 3: analizzare il contenuto HTML
importare le richieste 
da bs4 importa BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') # Se questa riga causa un errore, eseguire 'pip install html5lib' o installare html5lib 
print(soup.prettify())
Uscita:

Fornisce un output molto lungo; alcune schermate sono allegate di seguito.

Una delle cose più belle di Beautiful Soup è che è costruito su librerie di parsing HTML come html5lib, html.parse, lxml ecc. che permettono di creare simultaneamente l'oggetto di Beautiful Soap e di specificare la libreria di parser. 

Nel codice precedente, abbiamo creato l'oggetto Beautiful Soup passando due argomenti:

r.content: Contenuto HTML grezzo.
html5lib: Specifica il parser HTML da utilizzare.

Infine, viene stampato soup.prettify(), che fornisce una rappresentazione visiva dell'albero di parsing dal contenuto HTML grezzo.

Fase4: Ricerca e navigazione nell'albero di parses

Ora è il momento di estrarre alcuni dati utili dal contenuto HTML. Gli oggetti soup contengono i dati sotto forma di struttura annidata, che possono essere ulteriormente estratti in modo programmatico. Nel nostro caso, stiamo effettuando lo scraping di una pagina web composta da alcune citazioni. Creeremo quindi un programma che risolva queste citazioni. Il codice è riportato di seguito,

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Prima di proseguire, si consiglia di esaminare il contenuto HTML della pagina web, che abbiamo stampato con il metodo soup.prettify() e di cercare di trovare un modello per navigare verso le citazioni.

Ora spiegherò come ottenere questo risultato nel codice sopra riportato, 

Se navighiamo tra le citazioni, scopriremo che tutte le citazioni sono all'interno di un contenitore div il cui id è 'all_quotes'. Troviamo quindi questo elemento div (chiamato tabella nel codice) usando il metodo find():

table = soup.find('div', attrs = {'id':'all_quotes'})

Il primo argomento di questa funzione è il tag HTML da cercare. Il secondo argomento è un elemento di tipo dizionario per specificare gli attributi aggiuntivi associati a quel tag. Il metodo find() restituisce il primo elemento corrispondente. Si può provare table.prettify() per capire meglio cosa fa questo pezzo di codice.

Se ci concentriamo sull'elemento tabella, il contenitore div contiene ogni citazione la cui classe è quote. Pertanto, si eseguirà un ciclo attraverso ogni contenitore div la cui classe è quote.

È molto utile il metodo findAll(), simile al metodo find() per quanto riguarda gli argomenti, ma la differenza principale è che restituisce un elenco di tutti gli elementi corrispondenti. 

Stiamo iterando ogni preventivo utilizzando una variabile chiamata riga.

Analizziamo un esempio di contenuto di riga HTML per capire meglio:

Consideriamo ora il seguente pezzo di codice:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
Qui stiamo creando un dizionario per salvare tutte le informazioni su una citazione. La notazione a punti viene utilizzata per accedere alla struttura annidata. Per accedere al testo all'interno dell'elemento HTML, si usa .text:

Inoltre, possiamo anche aggiungere, rimuovere, modificare e accedere agli attributi dei tag. Per fare ciò, abbiamo trattato il tag come un dizionario:

quote['url'] = row.a['href']
Poi abbiamo aggiunto tutte le citazioni all'elenco chiamato citazioni. 

Infine, genereremo un file CSV, che verrà utilizzato per salvare i nostri dati.

nome file = 'inspirational_quotes.csv'

Abbiamo chiamato il nostro file inspirational_qoutes.csv e vi abbiamo salvato tutte le citazioni per poterle utilizzare anche in futuro. Ecco come appare il nostro file inspirational_quotes.csv,

Nell'output qui sopra, abbiamo mostrato solo tre righe, ma in realtà sono 33 righe. Ciò significa che abbiamo estratto una quantità considerevole di dati dalla pagina web con un semplice tentativo. 

Nota: in alcuni casi, il web scraping è considerato illegale e può causare il blocco permanente del vostro indirizzo IP da parte del sito web. È quindi necessario prestare attenzione e fare scraping solo su siti e pagine web che lo consentono. 

Perché utilizzare il Web Scraping?

Alcuni degli scenari reali in cui il web scraping potrebbe essere di grande utilità sono,

Generazione di lead
Una delle attività di vendita critiche per la maggior parte delle aziende è la generazione di lead. Secondo un rapporto di Hubspot, la generazione di traffico e di lead è la priorità numero uno del 61% dei marketer inbound. Il web scraping può svolgere un ruolo in tal senso, consentendo ai marketer di accedere agli elenchi di lead strutturati presenti su Internet.
Ricerca di mercato 

Fare le giuste ricerche di mercato è l'elemento più importante di ogni attività commerciale e richiede quindi informazioni molto accurate. L'analisi di mercato è alimentata da un volume elevato di scraping web di alta qualità e di grande impatto, che può essere di diverse dimensioni e forme. Questi dati possono essere uno strumento molto utile per la business intelligence. La ricerca di mercato si concentra principalmente sui seguenti aspetti commerciali:

  • Può essere utilizzato per analizzare le tendenze del mercato.
  • Può aiutarci a prevedere i prezzi di mercato.
  • Consente di ottimizzare i punti di ingresso in base alle esigenze dei clienti.
  • Può essere molto utile per monitorare i concorrenti.
Crea annunci

Il web scraping può essere una tecnica molto utile e fruttuosa per creare gli annunci in base alle tipologie di attività, ad esempio, immobili e negozi di e-commerce. Uno strumento di web scraping può aiutare l'azienda a sfogliare migliaia di inserzioni di prodotti della concorrenza sul proprio negozio e a raccogliere tutte le informazioni necessarie come prezzi, dettagli del prodotto, varianti e recensioni. Questo può essere fatto in poche ore e può aiutare a creare le proprie inserzioni, concentrandosi maggiormente sulle richieste dei clienti.

Confronta le informazioni

Il web scraping aiuta diverse aziende a raccogliere e confrontare le informazioni e a fornire questi dati in modo significativo. Pensiamo ai siti web di confronto prezzi che estraggono recensioni, caratteristiche e tutti i dettagli essenziali da vari altri siti web. Questi dettagli possono essere compilati e adattati per un facile accesso. Così, quando l'acquirente cerca un particolare prodotto, può essere generato un elenco da diversi rivenditori. In questo modo il web scraping renderà il processo decisionale molto più semplice per il consumatore, mostrando varie analisi dei prodotti in base alla domanda dei consumatori.

Informazioni aggregate

Il web scraping può aiutare ad aggregare le informazioni e a mostrarle in forma organizzata all'utente. Consideriamo il caso degli aggregatori di notizie. Il web scraping verrà utilizzato nei seguenti modi,

  1. Utilizzando il web scraping, è possibile raccogliere gli articoli più accurati e pertinenti.
  2. Può essere utile per raccogliere link a video e articoli utili.
  3. Costruire linee temporali in base alle notizie.
  4. Catturare le tendenze secondo i lettori delle notizie.

In questo articolo abbiamo analizzato in modo approfondito il funzionamento del web scraping, considerando un caso d'uso pratico. Abbiamo anche fatto un esercizio molto semplice per creare un semplice web scraper in Python. Ora potete effettuare lo scraping di qualsiasi altro sito web di vostra scelta. Inoltre, abbiamo anche visto alcuni scenari reali in cui il web scraping può svolgere un ruolo significativo. Ci auguriamo che l'articolo vi sia piaciuto e che tutto sia stato chiaro, interessante e comprensibile.  

Se siete alla ricerca di servizi proxy straordinari per i vostri progetti di web scraping, non dimenticate di dare un'occhiata a ProxyScrapeproxy residenziali e premium.