CodeGym /Corsi /Python SELF IT /Lavorare con il contenuto JavaScript

Lavorare con il contenuto JavaScript

Python SELF IT
Livello 33 , Lezione 1
Disponibile

1. Introduzione alle pagine dinamiche

Se hai mai provato a fare scraping di dati da siti che aggiornano il contenuto al volo con JavaScript, allora sai che può essere un bel rompicapo. Ma non preoccuparti! Come si suol dire, qualsiasi codice complesso può essere configurato per sembrare una magia. Vediamo insieme come requests_html ci permette di lavorare con questo tipo di contenuto.

Come sappiamo, non tutte le pagine web sono ugualmente utili. Alcune pagine caricano il contenuto immediatamente, mentre altre possono generarlo o aggiornarlo dinamicamente usando JavaScript. Questo crea alcune difficoltà per chi vuole estrarre dati, dato che l'HTML che vedi con gli strumenti per sviluppatori può differire dall'HTML che ottieni con una richiesta standard.

Problemi che sorgono durante lo scraping del contenuto dinamico

La maggior parte delle librerie per il web, come requests, funziona solo con le risposte del server e non può eseguire JavaScript. Questo significa che se il contenuto viene caricato o modificato tramite JavaScript, potresti non vederlo affatto con una richiesta standard.

2. Utilizzo della libreria requests_html

Ed è qui che entra in scena requests_html — una libreria che combina la semplicità di requests e la potenza di un browser per eseguire JavaScript. Ti offre un motore di rendering basilare che ti permette di interagire con pagine web dinamiche come se stessi usando un vero browser.

Installazione e configurazione della libreria

Per iniziare, installiamo requests_html. Apri il tuo terminale preferito ed esegui il seguente comando:

Bash
pip install requests-html

Perfetto, la libreria è installata! Ora possiamo iniziare a usarla.

Fondamenti dell'uso di requests_html per estrarre contenuto JavaScript

requests_html rende la nostra vita più semplice. Vediamo come funziona in pratica. Supponiamo di avere una pagina che genera alcuni dati tramite JavaScript.

Python

from requests_html import HTMLSession

# Creiamo una sessione HTML
session = HTMLSession()

# Effettuiamo una richiesta alla pagina web
response = session.get('https://example-dynamic-page.com')

# Renderizziamo il JavaScript
response.html.render()

# Estraiamo i dati
data = response.html.find('#dynamic-content', first=True)
print(data.text)

È magia! A differenza di requests, requests_html ci offre il metodo .render(), che permette di "scorrere" la pagina ed eseguire JavaScript. Una volta che la pagina "prende vita", puoi estrarre tutti i dati necessari usando i selettori che abbiamo visto in precedenza.

3. Esempi di estrazione dati

Ora immergiamoci e vediamo alcuni esempi, per capire come requests_html ci aiuta in scenari diversi.

Estrarre dati pratici da pagine dinamiche

Immagina una pagina che carica le ultime notizie solo dopo uno scroll. Con requests_html possiamo simulare il comportamento dell'utente.

Python

url = 'https://example-news-site.com'

# Carichiamo la pagina
response = session.get(url)

# Eseguiamo il rendering aumentando il timeout, se necessario
response.html.render(timeout=20)

# Troviamo gli elementi con le notizie
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

È così facile e senza stress abbiamo avuto accesso al contenuto, che prima sembrava irraggiungibile!

Elaborazione del contenuto JavaScript caricato con requests_html

Con requests_html e i selettori CSS che abbiamo esaminato nelle lezioni precedenti, puoi lavorare con il contenuto delle pagine web come se fossi già esperto nello scraping!

Python

# Selezioniamo il primo elemento del titolo della notizia
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# Estrarre il link dall'elemento
link = headline.find('a', first=True).attrs['href']
print(link)

4. Consigli pratici e trucchi

Sebbene requests_html sia uno strumento potente, ci sono alcune cose da ricordare quando lo usi:

  • Timeout e ritardi: Ricorda di configurare i timeout di rendering per le pagine più complesse. Questo ti aiuterà a evitare errori dovuti a caricamenti lenti.
  • Risorse di rendering: requests_html può consumare molte risorse, dato che esegue il rendering di JavaScript. Per grandi quantità di dati o pagine complesse questo potrebbe rallentare il processo.
  • CAPTCHA e protezioni dai bot: requests_html non bypassa le protezioni anti-bot e CAPTCHA, quindi per casi più complessi è meglio usare Selenium.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION