CodeGym /Corso Java /Python SELF IT /Estrazione di testi e attributi con Selenium

Estrazione di testi e attributi con Selenium

Python SELF IT
Livello 36 , Lezione 2
Disponibile

Ciao, futuri maestri dell'automazione! Oggi impariamo come, tramite Selenium, è possibile estrarre testi e attributi degli elementi su una pagina web. Questo è uno strumento potente nel vostro arsenale, perché nel mondo del web scraping, l'importante è saper raccogliere le informazioni. Siete pronti a tirare fuori dati utili dalle profondità dell'internet? Allora iniziamo!

1. Di cosa parla questa lezione?

  • Fondamenta dell'estrazione dati: Come estrarre testi da elementi HTML, che già di per sé suona come un'impresa.
  • Estrazione di attributi: Come recuperare chicche come link (href) e immagini (src), per poi fare cose incredibili con esse.
  • Esempi pratici: Proviamo a estrarre dati da tabelle e liste su una pagina web. Come diceva un grande programmatore: "Finché non tocchi il codice con le mani, non lo capirai fino in fondo".

2. Estrazione di testi dagli elementi

Supponiamo che abbiate un bel sito web con un sacco di informazioni utili. Avete bisogno di prendere il testo da elementi come titoli, paragrafi e altri elementi HTML. Come fare? Qui entra in gioco Selenium.

Esempio

Python

from selenium import webdriver

# Configuriamo il driver per Chrome
driver = webdriver.Chrome()

# Apriamo il sito
driver.get("https://example.com")

# Troviamo l'elemento tramite classe ed estraiamo il testo
element = driver.find_element_by_class_name("example-class")
text = element.text
print("Testo estratto:", text)

# Non dimentichiamo di chiudere il browser
driver.quit()

Qui utilizziamo il metodo .text per ottenere il contenuto testuale dell'elemento. È più semplice che imparare tutte le eccezioni in Python, vero?

3. Estrazione di attributi dagli elementi

Il testo è fantastico, ma cosa fare se serve qualcosa di più specifico, come la URL di un link o il link di un'immagine? Anche in questo caso Selenium non vi deluderà.

Esempio

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# Troviamo l'elemento tramite CSS Selector ed estraiamo l'attributo 'href'
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("URL del link:", link_href)

# Troviamo l'elemento tramite ID ed estraiamo l'attributo 'src'
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("URL dell'immagine:", img_src)

driver.quit()

Come si vede, è tutto uguale, ma invece di .text utilizziamo il metodo .get_attribute("nome_attributo"). Metodi facili da imparare, ma molto potenti da usare.

4. Applicazione pratica dei metodi

Passiamo dalla teoria alla pratica, perché i programmatori, generalmente, non amano rimanere troppo a lungo nell'astrazione. Vediamo un esempio in cui estraiamo dati da una tabella su una pagina web.

Estrazione di dati dalle tabelle

Supponiamo che dobbiate estrarre tutte le righe di una tabella su un sito e stamparle in console. Ecco come potete farlo:

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# Troviamo la tabella tramite ID
table = driver.find_element_by_id("example-table")

# Troviamo tutte le righe nella tabella
rows = table.find_elements_by_tag_name("tr")

for row in rows:
    # Troviamo tutte le celle nella riga corrente
    cells = row.find_elements_by_tag_name("td")
    for cell in cells:
        print(cell.text, end=' ')
    print()

driver.quit()

Prima troviamo la tabella stessa, poi iteriamo sulle sue righe e celle, estraendo e stampandone il testo. È come districare una rete complessa, ma alla fine tutto diventa semplice e chiaro!

5. Errori comuni e come evitarli

Prima di addentrarci nell'avventura codificata per estrarre dati, parliamo degli errori comuni con cui potreste imbattervi.

Quando lavorate con pagine dinamiche, il tempo può diventare il vostro nemico. Se provate a ottenere il testo o l'attributo di un elemento che non è ancora caricato, otterrete l'errore NoSuchElementException. È come cercare di catturare una sorpresa prima che sia arrivata. Per evitarlo, utilizzate attese esplicite (WebDriverWait) invece di affidarvi ai miracoli.

Python

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://example.com")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "lazy-class"))
    )
    print(element.text)
finally:
    driver.quit()

Qui utilizziamo WebDriverWait e expected_conditions per attendere il caricamento dell'elemento. È come aspettare che un piatto sia completamente pronto prima di gustarne il sapore.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION