Si immagini di aver bisogno di alcune informazioni da un sito web. Per esempio, un paragrafo su René Magritte. Come si potrebbe fare? Una soluzione semplice sarebbe copiare e incollare le informazioni da Wikipedia nel proprio file. Ma se si volesse ottenere grandi quantità di informazioni da un sito web nel minor tempo possibile? Per esempio, se si volesse estrarre molti dati da un sito web per addestrare un algoritmo di machine learning?
In questo caso, copiare e incollare non sarebbe una buona idea. Si dovrebbe allora ricorrere al Web Scraping. Questa tecnica consiste nell’usare metodi di intelligence automation per raccogliere migliaia o milioni di set di dati in un breve periodo di tempo, evitando il lungo e noioso processo di acquisizione manuale dei dati.
Come funziona il web scraping?
Il web scraping è una tecnica che permette di estrarre dati da siti web che non offrono un accesso diretto ai loro contenuti in forma strutturata. Questi dati possono essere utili per vari scopi, come l’analisi, la ricerca, il marketing, il monitoraggio, ecc.
Il web scraping si basa su due componenti principali: il crawler e lo scraper. Il crawler è un programma che naviga sul web seguendo i link tra le pagine e cercando le informazioni di interesse. Lo scraper è un programma che analizza il codice HTML delle pagine web e ne estrae i dati secondo delle regole specifiche.
Il web scraping può essere fatto in diversi modi, a seconda del tipo di sito web, della quantità di dati e della complessità del processo. Alcuni siti web, come Google, Twitter, Facebook, StackOverflow, ecc. offrono delle API (Application Programming Interface) che consentono di ottenere i loro dati in un formato standardizzato e facile da usare.
Questa è la soluzione più semplice e affidabile, ma non tutti i siti web hanno delle API o le rendono disponibili al pubblico. In questo caso, si può ricorrere al web scraping per ottenere i dati desiderati, creando uno scraper personalizzato o usando dei servizi online che offrono questa funzionalità. Il web scraping richiede delle competenze tecniche e una buona conoscenza del linguaggio HTML e dei metodi di interrogazione dei dati. Inoltre, bisogna rispettare le norme etiche e legali che regolano l’uso dei dati altrui.
Estrarre dati da pagine web con Python Web Scraper
Python Web Scraper è uno strumento facile da usare, ma anche potente e flessibile, che consente di estrarre dati da siti web in modo rapido e preciso. Permette di specificare quali pagine web si vogliono analizzare, quali elementi HTML si vogliono estrarre e come si vogliono salvare i dati in un file CSV.
Python Web Scraper utilizza la libreria BeautifulSoup per analizzare il codice HTML delle pagine web e trovare le informazioni di interesse. Si possono usare dei selettori CSS o degli attributi HTML per identificare gli elementi da cui estrarre i dati. Python Web Scraper consente anche di gestire le richieste HTTP, le eccezioni, i cookie, le intestazioni e altre impostazioni per il web scraping.
Il primo step per utilizzare Python Web Scraper, è installare Beautiful Soup, una libreria Python open source. Usa un parser html / xml, che è un programma che interpreta il codice sorgente della pagina e lo trasforma in una struttura composta da diversi elementi.
Questi elementi sono chiamati tag, elementi, attributi e valori. Un tag è una parola o un simbolo che indica il tipo di elemento, come <p> per un paragrafo o <img> per un’immagine. Un elemento è una porzione di codice che inizia con un tag di apertura e finisce con un tag di chiusura, come <p>Questo è un paragrafo</p>. Un attributo è una proprietà che si aggiunge a un tag per specificare delle caratteristiche aggiuntive, come <img src=“immagine.jpg” alt=“Questa è un’immagine”>. Un valore è il contenuto di un attributo o di un elemento, come immagine.jpg o Questa è un’immagine. Il parser html / xml permette di accedere ai vari elementi della pagina e di estrarre i dati di interesse.
Con la libreria Beautiful Soup, è possibile ottenere dati estraendo qualsiasi parte o elemento di una pagina Web con il massimo controllo sul processo.
Come installare Beautiful Soup
Per iniziare, bisogna assicurarsi di avere installato Python 3.x sul proprio sistema. Beautiful Soup è disponibile come pacchetto PyPi per tutti i sistemi operativi, quindi si può installare con il comando pip install beautifulsoup4 tramite il terminale.
Beautiful Soup non recupera direttamente gli URL. Funziona solo con file HTML o XML già pronti. Ciò significa che non puoi passare direttamente un URL al suo interno. Per risolvere questo problema, è necessario ottenere l'URL del sito Web di destinazione con la libreria delle richieste di Python prima di inviarlo a Beautiful Soup.
Per rendere disponibile quella libreria per il tuo scraper, esegui il comando pip install request tramite il terminale.
Per utilizzare la libreria parser XML, esegui pip install lxml
per installarla.
Ispezionare la pagina Web
Prima di estrarre qualsiasi informazione dall'HTML della pagina, è necessario comprendere la struttura della pagina. Questo è necessario per selezionare i dati desiderati dall'intera pagina. Per farlo, è sufficiente fare clic con il tasto destro del mouse sulla pagina che si desidera analizzare e selezionare ispeziona elemento.
Dopo aver fatto clic sul pulsante di ispezione, si apriranno gli Strumenti per gli sviluppatori del browser. Quasi tutti i browser sono dotati di strumenti per gli sviluppatori. Se si utilizza Google Chrome, è abbastanza facile usare Chrome DevTools. Gli strumenti per sviluppatori consentono di vedere il Document Object Model (DOM) del sito (la struttura HTML della pagina).
Come usare le librerie request e BeautifulSoup
Ora che tutto è pronto, aprire un editor di codice preferito e creare un nuovo file Python, dandogli un nome a piacere. Successivamente, importare le librerie necessarie (request e Beautifulsoup).
from bs4 import BeautifulSoup
import
Ecco come funziona la libreria requests:
from bs4 import BeautifulSoup
import requests website = requests.get('http://somewebpages.com') print(website)
Quando si esegue il codice qui sopra, viene restituito uno stato 200, che indica che la richiesta è andata a buon fine. Altrimenti, si ottiene uno stato 400 o altri stati di errore che indicano una richiesta GET fallita.
Ricordarsi di sostituire sempre l'URL del sito web tra le parentesi con l'URL di destinazione.
Una volta ottenuto il sito web con la richiesta get, lo si passa a Beautiful Soup, che ora può leggere il contenuto come file HTML o XML, utilizzando il parser XML o HTML integrato, a seconda del formato scelto.
Ecco il prossimo frammento di codice per vedere come farlo con il parser HTML:
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)
Il codice precedente restituisce l'intero DOM di una pagina web con il suo contenuto.
È anche possibile ottenere una versione più allineata del DOM, utilizzando il metodo prettify. Si può provare questo metodo per vederne l'output:
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())
È anche possibile ottenere il contenuto puro di una pagina web senza caricare il suo elemento con il metodo .text:
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)
Come eseguire lo scraping del contenuto di una pagina web in base al nome del tag
Con Beautiful Soup si può anche raschiare il contenuto di un particolare tag. Per farlo, è necessario includere il nome del tag di destinazione nella richiesta di scraper di Beautiful Soup.
Ad esempio, ecco come ottenere il contenuto dei tag h2 di una pagina web.
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)
Nel frammento di codice precedente, soup.h2 restituisce il primo elemento h2 della pagina web e ignora gli altri. Per caricare tutti gli elementi h2, si può usare la funzione incorporata find_all e il ciclo for di Python:
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print (soups)
Questo blocco di codice restituisce tutti gli elementi h2 e il loro contenuto. Tuttavia, è possibile ottenere il contenuto senza caricare il tag, utilizzando il metodo .string:
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
Per soups in h2tags:
print(soups.string)
È possibile utilizzare questo metodo per qualsiasi tag HTML. È sufficiente sostituire il tag h2 con quello desiderato.
Tuttavia, è anche possibile raccogliere più tag passando un elenco di tag al metodo find_all. Per esempio, il blocco di codice qui sotto raccoglie il contenuto dei tag a, h2 e title:
from bs4 import BeautifulSoup
import requests
website = requests. Get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup. Find(id = 'enter the target id here')
print(id.text)
Per fare questo per un nome di classe, sostituire l'id con class. Tuttavia, scrivere direttamente class genera una confusione sintattica, poiché Python la vede come una parola chiave. Per evitare questo errore, è necessario scrivere un trattino basso davanti a class, come questo: class_.
In sostanza, la riga contenente l'id diventa:
my_classes = soup.find(class_ = 'inserire qui il nome della classe di destinazione')
print(my_classes.text)
Tuttavia, è anche possibile effettuare lo scraping di una pagina web richiamando un particolare nome di tag con il suo id o la sua classe corrispondente:
data = soup.find_all('div', class_ = 'inserire qui il nome della classe di destinazione')
print(data)