CodeGym /Corsi /Python SELF IT /Caricamento di contenuti dinamici con requests_html

Caricamento di contenuti dinamici con requests_html

Python SELF IT
Livello 33 , Lezione 4
Disponibile

1. Contenuti dinamici e JavaScript

Se hai già imparato le basi del web scraping con librerie come BeautifulSoup e requests, è arrivato il momento di immergerti in aspetti più avvincenti di questa attività. Oggi parleremo di come si può lavorare con contenuti che vengono caricati dinamicamente solo mentre scorri la pagina. Il tuo browser non sarà più l'unico ad amare i feed infiniti, ora potrai insegnare anche ai tuoi script questo trucco! 🤖

Internet è pieno di pagine che si caricano dinamicamente, dove i contenuti si aggiornano e appaiono solo quando interagisci con JavaScript che, a sua volta, "fa la magia" lato client. Questo può essere una benedizione o una maledizione per chi fa web scraping. Da un lato, questi siti possono essere più interattivi e user-friendly, dall'altro — fare scraping su queste pagine diventa più complicato, dato che la libreria requests non capisce JavaScript.

2. La libreria requests_html

Per fortuna, come già sai, esiste requests_html — una libreria che combina la potenza di requests con le capacità di rendering simili a quelle di un browser, grazie a Pyppeteer. Questa libreria permette di caricare e rendere pagine con contenuti dinamici, offrendoti la possibilità di eseguire JavaScript e persino di scrollare le pagine.

Installazione di requests_html

Per iniziare, bisogna installare la libreria. Se non l'hai ancora fatto, esegui il comando:

Bash
pip install requests-html

Uso di requests_html

Dopo l'installazione, vediamo come usare requests_html per caricare e lavorare con contenuti dinamici.

Esempio: Caricamento e rendering della pagina

Cominciamo con un caso semplice: caricare una pagina, eseguire JavaScript ed estrarre dati. Consideriamo un esempio in cui carichiamo una pagina e otteniamo il testo di un elemento che appare solo dopo l'esecuzione di JavaScript.

Python

from requests_html import HTMLSession

# Creiamo una sessione
session = HTMLSession()

# Carichiamo la pagina
response = session.get('https://example.com/dynamic-page')

# Eseguiamo JavaScript per renderizzare la pagina
response.html.render()

# Estrarre il testo dell'elemento che appare dopo il rendering
content = response.html.find('#dynamic-content', first=True)
print(content.text)

In questo esempio usiamo il metodo render(), che permette a requests_html di eseguire JavaScript sulla pagina e rendere i contenuti che potrebbero essere nascosti a un caricamento standard.

3. Scrolling automatico delle pagine

A volte i contenuti dinamici non si caricano subito, ma appaiono solo man mano che si scrolla la pagina. requests_html può aiutarti anche in questo, permettendo di simulare lo scrolling della pagina e caricare più dati.

Esempio di scrolling automatico

Supponiamo di avere una pagina con un feed infinito di notizie, e di voler estrarre il maggior numero possibile di elementi. Ecco come si può fare:

Python

from requests_html import HTMLSession

session = HTMLSession()
response = session.get('https://example.com/infinite-scroll')

# Renderizziamo e scrolliamo la pagina
response.html.render(scrolldown=5, sleep=1)

# Estrarre tutti gli elementi delle notizie
news_items = response.html.find('.news-item')

for news_item in news_items:
    print(news_item.text)

Qui il metodo render() è arricchito dai parametri scrolldown e sleep, che indicano quante volte scrolliamo verso il basso e quanto tempo aspettiamo tra gli scroll.

4. Applicazioni pratiche

Ma perché dovresti perdere tempo con cose come lo scrolling automatico? 🤔

  • Ricerche di mercato: Molte aziende usano pagine infinite per mostrare continuamente dati utili per l'analisi dei trend e dei comportamenti dei consumatori.
  • Monitoraggio dei social media: Tante piattaforme di social media usano feed infiniti, e requests_html diventa utile per monitorare e raccogliere dati da queste fonti.
  • Notizie e aggiornamenti: Estrarre titoli di notizie e articoli da feed infiniti ti permette di ottenere informazioni attuali per l'analisi.

5. Errori tipici e loro soluzioni

Lavorando con pagine dinamiche e requests_html, possono sorgere diversi problemi. Vediamone un paio comuni:

Problema con il rendering

A volte il metodo render() potrebbe non completarsi con successo, specialmente se la pagina è troppo grande o complessa. In questi casi, può aiutare aumentare il tempo di rendering usando il parametro timeout o ridurre il numero degli scroll.

Python
response.html.render(timeout=30)

Esecuzione indesiderata di script

Possono verificarsi situazioni in cui il JavaScript della pagina blocca l'esecuzione dello script o causa problemi. Prova a utilizzare il parametro wait per aspettare la comparsa degli elementi necessari.

Python
response.html.render(wait=2)

Risoluzione dello schermo e tipo di dispositivo

Alcuni siti forniscono contenuti in base alla risoluzione dello schermo o al tipo di dispositivo. Controlla con quale user-agent viene eseguita la richiesta e rendi il contenuto.

Python

response.session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

6. Cosa leggere ancora

requests_html è uno strumento potente, ma per sfruttarne appieno le potenzialità ed evitare errori comuni, studia la documentazione ufficiale. Ti aiuterà a capire meglio come gestire lo scrolling e rendere pagine complesse con successo.

A questo punto sei armato di tutto il necessario per non temere i contenuti dinamici e i feed infiniti. Fai attenzione, e ricorda di specificare che il tuo script è un hacker "bianco", che ama aiutare le persone ad automatizzare le loro attività, e non un malintenzionato! 😇

1
Опрос
Lettura di contenuto dinamico,  33 уровень,  4 лекция
недоступен
Lettura di contenuto dinamico
Lettura di contenuto dinamico
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION