Salta al contenuto

Web Scraping con Selenium e Python: la guida definitiva per il 2024

Il web scraping è il processo di estrazione automatica dei dati dai siti Web utilizzando strumenti software e script. Il selenio è uno degli strumenti più popolari utilizzati per il web scraping grazie alle sue forti capacità di automazione web. In questa guida completa, esploreremo il web scraping con Selenium utilizzando Python.

Panoramica del Web Scraping

Prima di immergerci nel Selenium, capiamo innanzitutto cos'è il web scraping e perché viene utilizzato.

Il web scraping si riferisce a tecniche per la raccolta automatica di dati dai siti Web tramite script e bot anziché tramite copia e incolla manuale. I dati raccolti vengono quindi strutturati e archiviati in un database o foglio di calcolo per ulteriori analisi.

I casi d'uso più comuni del web scraping includono:

  • Monitoraggio dei prezzi – Tieni traccia dei prezzi dei prodotti sui siti di e-commerce. Aiuta a rilevare modifiche ed errori di prezzo.

  • Ricerche di mercato – Raccogliere dati su concorrenti, prodotti, recensioni, ecc. da tutto il Web.

  • Monitoraggio delle notizie – Eliminare articoli e notizie dai siti dei media. Utile per giornalisti e professionisti delle pubbliche relazioni.

  • Ricerca – Gli scienziati sociali utilizzano il web scraping per raccogliere dati sui social media per studi di ricerca.

  • Costruzione di banche dati – Crea set di dati strutturati di contatti aziendali, specifiche del prodotto ecc. Raschiando siti Web.

Il web scraping può far risparmiare enormi quantità di tempo e fatica rispetto alla raccolta manuale dei dati. Tuttavia, assicurati di procedere in modo etico e di seguire le regole del file robots.txt del sito web.

Perché utilizzare il selenio per il web scraping?

Sono disponibili molti strumenti per il web scraping come BeautifulSoup, Scrapy, Puppeteer ecc. Tuttavia, Selenium si distingue quando è necessario:

  • Raccogli dati da siti Web complessi e dinamici che caricano contenuti utilizzando JavaScript.

  • Interagisci con i siti Web facendo clic sui pulsanti, compilando moduli ecc. Prima dello scraping.

  • Raccogli i dati nascosti dietro i moduli di accesso o le porte di pagamento.

  • Aumenta lo scraping per gestire siti Web di grandi dimensioni con migliaia di pagine.

Selenium automatizza un vero browser web come Chrome o Firefox invece di limitarsi a recuperare e analizzare HTML come la maggior parte degli altri web scraper. Ciò rende possibile raschiare dati dinamici.

Inoltre, Selenium ha alle spalle una vasta comunità e supporta più linguaggi tra cui Python, Java, C# e JavaScript.

Architettura di web scraping del selenio

Prima di addentrarci nel codice, capiamo come Selenium esegue il web scraping:

Architettura del selenio per il Web Scraping

  • Selenium interagisce con il browser utilizzando un file API WebDriver.

  • Il WebDriver avvia e controlla un browser come Chrome.

  • Esegue codice di scraping e script scritti in Python, Java ecc.

  • Le pagine Web vengono visualizzate ed elaborate dal browser.

  • I dati raschiati vengono raccolti e strutturati secondo la logica dello script.

  • Puoi distribuire lo scraper sulle tue macchine o utilizzare una piattaforma cloud.

Questa architettura consente a Selenium di analizzare anche siti complessi contenenti JavaScript che strumenti come Requests non sono in grado di gestire.

Configurazione del selenio con Python

Prima di poter iniziare il web scraping, dobbiamo configurare Selenium in un ambiente Python.

Installa Python

Assicurati di avere Python 3.6 o successivo installato sul tuo sistema. Puoi scaricare l'ultima versione di Python da python.org.

Installa il selenio

Una volta installato Python, esegui il comando seguente per installare Selenium:

pip install selenium

Questo installerà il pacchetto Python Selenium da PyPI.

Installa i WebDriver

Il Selenium WebDriver consente di controllare i browser per lo scraping. È necessario installare il WebDriver per il browser che desideri utilizzare:

Chrome: Scarica il ChromeDriver che corrisponde alla tua versione di Chrome.

Firefox: Ottenere il GeckoDriver in base alla versione di Firefox.

bordo: Installa il file MicrosoftWebDriver.

Assicurati che l'eseguibile WebDriver sia nel PERCORSO del tuo sistema per consentire a Selenium di rilevarlo.

Questo è tutto! Ora siamo pronti per iniziare il web scraping con Selenium Python.

Avvio del browser

Il primo passo è avviare il browser tramite Selenium.

Importa il selenio e crea un file WebDriver istanza passando il percorso all'eseguibile del driver del browser:

from selenium import webdriver

driver = webdriver.Chrome(‘/path/to/chromedriver‘) 

Puoi anche inizializzare un'istanza del browser headless che non aprirà una finestra visibile:

from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

Quindi, usa il get() metodo per far sì che l'istanza del browser raggiunga un URL:

driver.get(‘https://www.example.com‘)

Il browser ora aprirà la pagina, eseguirà il rendering di JavaScript, caricherà contenuto dinamico, ecc. Ora possiamo iniziare lo scraping!

Individuazione degli elementi della pagina

Per estrarre i dati dalle pagine, dobbiamo prima trovare gli elementi HTML rilevanti. Il selenio fornisce il find_element() metodo per questo:

search_box = driver.find_element(By.NAME, ‘q‘)

Questo individua l'elemento con l'attributo name="q". Alcune altre strategie di localizzazione comuni sono:

  • By.ID – Trova per ID elemento
  • By.XPATH – Trova utilizzando la query XPath
  • By.CSS_SELECTOR – Trova utilizzando il selettore CSS
  • By.CLASS_NAME – Trova per nome della classe CSS
  • By.TAG_NAME – Trova per nome del tag HTML

Puoi anche individuare più elementi utilizzando find_elements() che restituisce un elenco.

Estrazione del testo

Dopo aver individuato un elemento, puoi estrarne il testo utilizzando il comando text attributo:

heading = driver.find_element(By.TAG_NAME, ‘h1‘)
print(heading.text)

Questo stamperà il file <h1> testo dell'intestazione della pagina.

Allo stesso modo, puoi ottenere il valore dei campi di input:

username = driver.find_element(By.ID, ‘username‘)
print(username.get_attribute(‘value‘))

Per fare clic su collegamenti e pulsanti in una pagina, utilizzare il comando click() metodo sull'elemento:

link = driver.find_element(By.LINK_TEXT, ‘Next Page‘)
link.click() 

Ciò consente di interagire con contenuti impaginati, popup, modali ecc.

Compilazione moduli

Puoi inserire testo in caselle di testo e altri elementi di input utilizzando send_keys():

search_box.send_keys(‘Web Scraping‘)

Ciò consente l'accesso ai siti, l'invio di moduli ecc. Prima dello scraping.

Esecuzione di JavaScript

Selenium consente anche di eseguire JavaScript direttamente sulle pagine utilizzando execute_script():

driver.execute_script(‘alert("Hello World");‘)

Puoi usarlo per raschiare i dati inseriti da JavaScript nel DOM.

In attesa del caricamento degli elementi

I siti moderni utilizzano AJAX e JavaScript pesanti per caricare i contenuti in modo dinamico. A volte, potrebbe essere necessario attendere il caricamento di determinati elementi o dati prima dello scraping.

Il selenio ha WebDriverWait ed expected_conditions per gestire questo:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, ‘someid‘)))

Lo script ora attenderà fino a 10 secondi affinché l'elemento diventi cliccabile.

Sono disponibili molte condizioni previste come la visibilità dell'elemento, i caricamenti AJAX ecc. che puoi utilizzare per gestire il contenuto dinamico della pagina.

Scorrere le pagine

Per le pagine Web lunghe, potrebbe essere necessario scorrere verso il basso per caricare contenuti aggiuntivi tramite JavaScript. Anche il selenio può fare questo:

# Scroll down the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# Scroll back to top
driver.execute_script("window.scrollTo(0, 0);")   

Ciò consente di raschiare pagine Web lunghe. Lo stesso approccio di scorrimento funziona per lo scraping dei post su Facebook, Twitter e altri siti di social media.

Gestione dell'accesso e dei paywall

Alcuni siti richiedono l'accesso prima dello scraping o potrebbero avere paywall che limitano l'accesso.

Puoi utilizzare Selenium per inserire credenziali, bypassare i paywall e accedere a informazioni riservate per lo scraping:

username = driver.find_element(By.ID, ‘username‘)
password = driver.find_element(By.ID, ‘password‘)

username.send_keys(‘myusername1234‘) 
password.send_keys(‘mypassword5678‘)

login_button = driver.find_element(By.XPATH, ‘//button[text()="Log in"]‘)
login_button.click()

Ciò consente di accedere a siti come Amazon, eBay ecc. Per raschiare contenuti riservati.

Esempio di raschiatura del nastro di selenio

Mettiamo tutto insieme in uno script per il web scraper Selenium:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# Click cookie consent banner
cookie_btn = driver.find_element(By.ID, ‘cookiebanner-accept‘) 
cookie_btn.click()

# Wait for results to load
results = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "results"))
)

# Extract data from results 
headings = results.find_elements(By.TAG_NAME, ‘h3‘)
for heading in headings:
   print(heading.text)

driver.quit()

Questo script:

  • Avvia Chrome e va su example.com
  • Fa clic sul banner di consenso dei cookie per abilitare lo scraping
  • Attende il caricamento dei risultati
  • Estrae i testi delle intestazioni e li stampa

Puoi migliorarlo con lo scorrimento, le funzionalità di accesso ecc. Per creare potenti raschiatori!

Suggerimenti per un web scraping efficace con il selenio

Ecco alcuni suggerimenti per migliorare la produttività del web scraping con Selenium:

  • Utilizza il browser senza testa per uno scraping più rapido senza la necessità di eseguire il rendering e visualizzare l'interfaccia utente

  • Limita le azioni non necessarie come l'apertura di nuove schede, le interazioni al passaggio del mouse ecc. per raschiare più velocemente

  • Attendi il caricamento della pagina e AJAX richieste da completare prima di estrarre i dati

  • Scorri in modo incrementale quando si raschiano pagine lunghe per evitare di caricare tutto in una volta

  • Utilizza i selettori CSS per la leggibilità e le prestazioni durante l'individuazione degli elementi

  • Riprova in caso di errori invece di fermarsi completamente per rendere i raschiatori più robusti

  • Richieste di accelerazione per evitare di sovraccaricare i server e di essere bloccati

  • Corri nel cloud utilizzando servizi come Selenium Grid per affidabilità e scalabilità

Alternative al selenio per il web scraping

Ecco alcuni altri strumenti popolari per il web scraping che puoi esaminare:

  • Bella zuppa – Libreria Python leader per lo scraping di HTML e XML

  • Scrapy – Framework di scansione web veloce per progetti di scraping di grandi dimensioni

  • burattinaio – Libreria di scraping Chrome senza testa per sviluppatori JavaScript

  • Drammaturgo – Raschiare utilizzando i browser Chromium, Firefox e WebKit

  • Apifica – Piattaforma di web scraping scalabile con proxy integrati e Chrome headless

Ogni strumento ha i suoi punti di forza e di debolezza. Valutali rispetto al tuo caso d'uso specifico quando selezioni una soluzione di web scraping.

Conclusione

Selenium è uno strumento versatile per creare robusti web scraper in Python e altri linguaggi. Apre possibilità come lo scraping di siti JavaScript, la gestione di contenuti dinamici, l'accesso a dati riservati ecc. che altrimenti sarebbero difficili.

Assicurati di seguire pratiche di scraping etico e di rispettare le restrizioni dei siti Web quando utilizzi Selenium. Non sovraccaricare i server con scraping aggressivi.

Con la potenza di Selenium, Python e le strategie di sound scraping, puoi estrarre enormi quantità di dati utili dal Web per applicazioni di business intelligence, ricerca e scienza dei dati.

Partecipa alla conversazione

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *