Selenium Web Scraping - Tutto quello che c'è da sapere nel 2024

Guide, Proxy, Pitone, Scraping, Mar-06-20245 minuti di lettura

La raccolta dei dati è un termine molto utilizzato nell'ultimo decennio. Ogni azienda vuole conoscere a fondo i propri clienti, in modo da poter sviluppare la strategia migliore per risolvere i problemi delle persone. Di solito, le organizzazioni basate sulla tecnologia dispongono di data lake per ottenere dati da analizzare. Ma, a volte, devono raccogliere i dati online per

La raccolta dei dati è un termine molto utilizzato nell'ultimo decennio. Ogni azienda vuole conoscere a fondo i propri clienti, in modo da poter sviluppare la strategia migliore per risolvere i problemi delle persone. Di solito, le organizzazioni basate sulla tecnologia dispongono di data lake per ottenere dati da analizzare. A volte, però, devono raccogliere i dati online per varie analisi, come l'analisi del sentiment, l'analisi SEO e il monitoraggio. Il web scraping è l'approccio per estrarre i dati da una fonte mirata e salvarli in un archivio locale o nel cloud. Python è il miglior linguaggio di programmazione per eseguire lo scraping del web. Esistono molte librerie in Python che possono aiutare a raschiare i dati da siti web, blog e altre fonti online. Le più famose sono BeautifulSoup e Selenium. In questo articolo vedremo come eseguire il web scraping con Selenium.

Che cos'è il Web Scraping?

Il web scraping consiste nell'estrarre una grande quantità di dati da varie pagine web online. Al giorno d'oggi, i principianti dell'apprendimento automatico e dell'intelligenza artificiale investono molto tempo nell'apprendimento di diversi modi per effettuare lo scraping del web. Il web scraping è composto da due parti: il crawler e lo scraper. Il crawler è responsabile di trovare e localizzare i dati necessari dalla fonte di destinazione, quindi lo scraper aiuta a estrarre tali dati dalla fonte.

Il selenio: che cos'è?

Selenium è una libreria python gratuita e open-source, un framework di testing automatico utilizzato principalmente per testare e validare le applicazioni web su vari browser. È possibile utilizzare qualsiasi linguaggio di programmazione, come C#, Java e il mio preferito, Python. Il software Selenium è una suite di strumenti composta da:

  • Ambiente di sviluppo integrato (IDE) Selenium.
  • Telecomando Selenium.
  • Webdriver.
  • Griglia Selenium.

Vediamo come utilizzare Selenium con Python per automatizzare l'intero processo di web scraping.

Dichiarazione del problema:

Vogliamo raccogliere i nomi e gli stipendi dei giocatori dell'NBA dell'ultimo decennio e salvare i dati in formato data frame. NOTA: Per imparare e spiegare come funziona Selenium web scraping, utilizziamo il sito web hoopshype.

Installazione del driver di Chrome:

Prima di avviare il processo di scraping del Web, è necessario installare il driver Chrome sul computer. Il driver Chrome da installare dipende dalla versione del browser Chrome in uso. È possibile verificarlo seguendo questi passaggi:

FASE 1: Aprire il browser Chrome-> Fare clic sull'icona "Hamburger", presente nell'angolo superiore destro del browser.

FASE 2: dopo aver fatto clic sull'icona "Hamburger", verrà visualizzata l'opzione "Aiuto". Fare clic su "Aiuto" e selezionare "Informazioni sul browser chrome". Una volta fatto ciò, si aprirà la pagina della versione. L'immagine seguente rappresenta la pagina della versione di Google Chrome.

Finestra della versione di Google Chrome

Nota: se sono presenti aggiornamenti, è meglio installarli prima di installare il driver chrome.

Una volta individuata la versione, accedere al sito Web dei driver per chrome e scaricare il driver in base alla versione di Chrome in uso.

Installare Selenium:

Il modo più semplice per installare il pacchetto selenium è attraverso PIP (Package Installer Python). Si può aprire un qualsiasi blocco note, Juypter o Google Collab, e digitare il seguente codice python:

pip installa selenium

Il comando precedente scarica tutti i pacchetti di dipendenza per Selenium. Vediamo ora come implementare il web scraping con Selenium.

Web Scraping con Selenium:

Si consiglia di creare un ambiente virtuale e di implementare il processo di web scraping per una migliore pratica. In questo esempio utilizziamo il notebook Juypter per effettuare lo scraping del Web.

FASE 1: Importare tutte le librerie necessarie. Pandas e Selenium webdriver sono le librerie principali per il semplice web scraping. Di seguito è riportato il codice python per importare tutte le librerie necessarie:

da selenium import webdriver
da selenium.webdriver.common.keys import keys
importare pandas come pd

FASE 2: Una volta importate le librerie, il passo successivo consiste nell'avviare il driver Chrome. Di seguito è riportato il codice python per avviare il driver

driver = webdriver.Chrome(r"\Selenium\chromedriver.exe")

NOTA: nell'argomentazione, indicare il percorso completo della posizione del driver di Chrome sul sistema locale.

FASE 3: una volta avviato il driver, il browser Chrome dovrebbe aprirsi in una nuova finestra. Ma la finestra dovrebbe essere vuota, poiché non c'è un URL del feed. Il codice python per l'URL del feed di destinazione è mostrato di seguito:

seed_url = 'https://hoopshype.com/salaries/players/'
driver.get(seed_url)

FASE 4: una volta inserito l'URL del feed, nella nuova finestra dovrebbe essere possibile visualizzare il sito web di destinazione. Il processo seguente consiste nel trovare il nome di ogni giocatore dell'NBA. In Selenium, è possibile trovare gli elementi HTML con i seguenti metodi:

  • ID
  • Selettore CSS
  • Selettore XPATH
  • Nome
  • Nome della classe
  • Nome del tag

Nel nostro esempio, vediamo come individuare gli elementi utilizzando il selettore XPATH. Vogliamo estrarre due dettagli da questi dati:

  • Nome del giocatore
  • Stipendio

Nota: è anche possibile utilizzare il modulo di ricerca per trovare gli elementi web. Il modulo di ricerca si trova in fondo alla pagina di ispezione.

FASE 5: quando si arriva alla pagina di destinazione, si dovrebbe vedere un elenco di giocatori e i loro stipendi per le stagioni (anno). Selezionare uno dei nomi dei giocatori e fare clic con il tasto destro del mouse. Si apriranno diverse opzioni. In queste opzioni, fare clic su "Ispeziona". L'immagine seguente rappresenta la pagina di ispezione.

Ispezione della pagina di destinazione

Ora, come già detto, l'obiettivo è estrarre i nomi dei giocatori. Pertanto, il primo passo consiste nel trovare un elemento di un singolo giocatore e il fattore comune tra tutti gli elementi dei giocatori. Quindi, nello stesso processo, fare clic con il tasto destro del mouse sul nome del giocatore e ispezionarlo. Questo dovrebbe portarvi direttamente alla posizione dell'elemento. Invece di prendere il nome di un giocatore nel nostro scenario, prendiamo i nomi di tutti i giocatori. L'elemento comune a tutti i giocatori è "td class-'name'". Quindi, se utilizziamo questo elemento e lo mettiamo in loop, otterremo i nomi di tutti i giocatori. Il codice python per estrarre il nome di un giocatore è mostrato di seguito:

nba_players = driver.find_elements_by_xpath('//td[@class="nome"]')
lista_giocatori = []
per p in range(len(nba_players)):
    players_list.append(nba_players[p].text)
stampa(lista_giocatori)

Spiegazione: Come già detto, stiamo trovando l'elemento del codice HTML utilizzando l'approccio XPATH. Ovviamente, abbiamo bisogno del percorso XPATH di più elementi. Il modo più semplice è trovare l'elemento nome, che è "td class-name". Fare clic con il pulsante destro del mouse sull'elemento e selezionare "Copia". Dovrebbero essere disponibili diverse opzioni, come copia del percorso JS e copia XPATH. Selezionando copy XPATH, si otterrà automaticamente il percorso XPATH dell'elemento. Incollate il percorso nell'argomento find_elements_by_XPATH. Una volta incollato il percorso, Python dovrebbe iniziare a identificare questi elementi e ottenere i loro indirizzi, non il nome effettivo. Per ottenere i nomi effettivi dei giocatori, faremo un ciclo della funzione e aggiungeremo i risultati a un elenco vuoto come output. Una volta eseguito il frammento di codice di cui sopra, si dovrebbe ottenere l'output mostrato nell'immagine seguente.

Output per l'estrazione del nome dei giocatori

Ora che abbiamo i nomi dei giocatori, il passo successivo è ottenere i rispettivi stipendi. Il processo esatto di estrazione del nome viene eseguito per ottenere i dettagli dello stipendio.

FASE 6: I dati relativi agli stipendi vengono estratti utilizzando il codice python come mostrato di seguito:

players_salary=driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]')
lista_salari=[]
per s in range(len(players_salary)):
    salary_list.append(players_salary[s].text)
stampa(lista_salari)

Spiegazione: Il processo è lo stesso. L'unica differenza è l'elemento comune tra i giocatori. L'elemento web "td class-'hh-salaries-sorted'" è l'elemento comune. Dopo aver trovato l'elemento, creiamo un elenco vuoto per eseguire il loop dell'intera funzione e aggiungiamo i dettagli dei salari all'elenco vuoto. L'output dovrebbe assomigliare all'immagine mostrata di seguito:

Output per l'estrazione dello stipendio dei giocatori

FASE 7: Ora abbiamo raccolto i dati dal nostro obiettivo. Ma, se si guarda attentamente, i dati si riferiscono solo a una stagione (l'anno in corso). Il nostro problema dice di estrarre i dati dell'ultimo decennio. È qui che entra in gioco l'automazione del browser. Non c'è da preoccuparsi. Possiamo utilizzare lo stesso codice per la stagione come funzione loop. Di seguito è riportato il codice python per automatizzare il processo di scraping e ottenere i dati dell'ultimo decennio:

per i in range(2010,2021):
    numero_pagina = str(i) + '-' + str(i+1) +'/'
    feed_url = 'https://hoopshype.com/salaries/players/' + numero_pagina
    driver.get(feed_url)
    
    giocatori = driver.find_elements_by_xpath('//td[@class="nome"]')
    stipendi = driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]') 
    
    giocatore = []
   per j in range(len(players)):
        player.append(players[j].text)
    
    stipendio = []
   per k in range(len(stipendi)):
        stipendio.append(stipendi[k].text)

Spiegazione: Come già detto, vogliamo ottenere i dati degli ultimi dieci anni. Per farlo, dobbiamo implementare la paginazione. La paginazione è il processo di aggiunta di numeri consecutivi, di solito numeri di pagina, per identificare la sequenza d'ordine della pagina. Le stagioni sono rappresentate nel formato AAAA/MM. Per riconoscerlo, utilizziamo la tecnica della concatenazione. Successivamente, utilizziamo lo stesso processo e lo stesso codice all'interno del ciclo.

FASE 8: L'ultimo passo consiste nel salvare i dati nel data frame per varie analisi, come la sentiment analysis e l'analisi della concorrenza. Il codice python per salvare i dati nel data frame è mostrato di seguito:

df = pd.DataFrame(columns=['Player','Salary','Year'])
dati = lista(zip(giocatore[1:],stipendio[1:])) 
df1 = pd.DataFrame(data, columns=['Player','Salary']) 
df1['Anno'] = i
df = df.append(df1)

NOTA: nella seconda riga del codice, si può notare che ho eseguito l'affettatura. Il motivo è che quando si vede l'output per i nomi e gli stipendi dei giocatori, il primo indice, cioè l'indice 0, è "GIOCATORE" e "DATA". Questi elementi non hanno molta importanza per la tabella. Quindi, possiamo eliminare questi elementi.

Spiegazione: Abbiamo creato un frame vuoto con le colonne "Giocatore", "Stipendio" e "Anno". Si accumulano tutti i dati in un unico elenco con la funzione Zip per aggiungere l'elenco al frame di dati. Una volta aggiunti i dati al data frame, è ora di terminare l'automazione e chiudere il driver. Se necessario, è possibile salvare il frame di dati in un file CSV per un repository di dati.

Ecco fatto! Avete realizzato con successo l'automazione e il web scraping utilizzando Selenium e Python.

Domande frequenti:

1. Selenium è adatto al web scraping?
Sì, se si intende eseguire lo scraping di pagine web dinamiche, che utilizzano JavaScript. Ma è anche una buona opzione per Python. Selenium è un buon punto di partenza per i principianti interessati al web scraping.
2. Qual è il migliore, BeautifulSoup o Selenium?
La risposta si basa sul tipo di pagina web di destinazione e sulla scala del progetto. Se si vuole eseguire lo scraping di una pagina statica piccola e ben strutturata, è meglio BeautifulSoup. Se il progetto prevede pagine web dinamiche complesse e strutturate, il web scraping di Selenium può essere l'opzione migliore.
3. Quali sono i migliori strumenti per il web scraping?
Python è lo strumento migliore e più adatto per eseguire lo scraping del web. Le librerie python, come BeautifulSoup, Selenium e Request, e altri strumenti, come Scrapy, sono i migliori strumenti per lo scraping del web.

Conclusione:

Questo articolo mostra come installare un driver Chrome sul sistema locale per automatizzare un piccolo processo di scraping del web. In tempo reale, la gestione di una grande quantità di dati (in termini di dimensioni, come MB, GB e talvolta TB) comporta passaggi complessi. Selenium è un buon punto di partenza per i principianti interessati alla raccolta di dati, al processo di screen scraping e alla scienza dei dati in generale. Come già detto, un processo di web scraping complesso richiede molto tempo per raccogliere i dati. La maggior parte dei siti web non consente lo scraping del web per un periodo prolungato; una volta raggiunta tale soglia, il sito web probabilmente bloccherà il vostro indirizzo IP e interromperà il processo di scraping del web. Per evitare queste difficoltà, si consiglia di utilizzare un proxy. ProxyScrape fornisce eccellenti proxy residenziali, ideali per le attività ad alta richiesta, come lo scraping del web.

DISCLAIMER: Questo articolo è strettamente a scopo didattico. Senza seguire le linee guida corrette, l'esecuzione di web scraping può essere illegale. Questo articolo non supporta in alcun modo il web scraping illecito.