CodeGym /Corso Java /Python SELF IT /Ricerca di elementi con i metodi find e find_all per scra...

Ricerca di elementi con i metodi find e find_all per scraping mirato

Python SELF IT
Livello 32 , Lezione 1
Disponibile

1. Perché usare find e find_all?

Oggi parliamo di due metodi principali che ci permettono di estrarre in modo mirato ed efficace gli elementi dai documenti HTML: find e find_all.

Prima di tuffarci nel codice, discutiamo perché questi metodi sono necessari. Immagina una pagina web come una grande biblioteca, dove ogni parola e frase è un elemento HTML. Sembra quasi che trovare le informazioni richieste sia come cercare di indovinare il gusto di un gelato senza conoscerne il colore. I metodi find e find_all sono i tuoi "rilevatori di gusto" che ti aiutano a sintonizzarti sulle informazioni necessarie.

  • find: Questo metodo è come la routine di un programmatore che cerca rapidamente la prima tazza di caffè del mattino: trova e restituisce velocemente il primo elemento che soddisfa i criteri.
  • find_all: Questo è un approccio più paziente e approfondito, restituisce una lista di tutti gli elementi che soddisfano i criteri di ricerca. È utile quando hai bisogno di più informazioni (per esempio, come avere diverse tazze di caffè durante la giornata).

2. Utilizzo del metodo find

Il metodo find può essere usato quando vuoi rapidamente estrarre il primo elemento adatto. Riceve vari parametri, come il nome del tag, attributi e persino funzioni.

Firma del metodo find


find(name=None, attrs={}, recursive=True, string=None, **kwargs)

Parametri del metodo find

  • name: Nome del tag che vuoi trovare. Può essere qualsiasi tag HTML, ad esempio, div, p, h1, a ecc.
  • attrs: Dizionario di attributi del tag. Ad esempio, {'class': 'example'} o {'id': 'main'}. Questo parametro consente di restringere la ricerca.
  • recursive: Un parametro booleano che determina se il metodo cercherà il tag a tutti i livelli di annidamento. Di default è True, il che significa che la ricerca verrà effettuata su tutti i livelli.
  • string: Cerca gli elementi con un testo specifico. Utile per filtrare elementi in base al contenuto del testo.
  • kwargs: Argomenti aggiuntivi per la ricerca basati sugli attributi. Se specificati argomenti come class_, saranno interpretati come attrs={'class': 'valore'}.

Esempio

Python

from bs4 import BeautifulSoup

html_doc = """
<html>
    <head><title>La storia del Dormouse</title></head>
    <body>
        <p class="title"><b>La storia del Dormouse</b></p>
        <p class="story">C'era una volta tre piccole sorelle; e i loro nomi erano
        <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
        <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> e
        <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
        e vivevano in fondo a un pozzo.</p>
    </body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
first_link = soup.find('a')  # Trova il primo tag <a>

print(first_link)  # Stampa: <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>

Come puoi vedere, il metodo find ha trovato il primo tag <a> nel documento, e possiamo continuare la nostra ricerca sapendo che le informazioni richieste sono state trovate.

3. Utilizzo del metodo find_all

Il metodo find_all restituisce una lista di tutti gli elementi che corrispondono ai criteri specificati. Questo è particolarmente utile quando devi ottenere tutti i tag di un certo tipo o tutti gli elementi con una specifica classe.

Firma del metodo find_all


find_all(name=None, attrs={}, recursive=True, string=None, limit=None, **kwargs)

Parametri del metodo find_all

  • name: Nome del tag che vuoi trovare. Può essere una stringa contenente il nome del tag (div, a, p ecc.) oppure una lista di tag, ad esempio, ["div", "p"].
  • attrs: Dizionario di attributi per filtrare i tag, ad esempio, {'class': 'example'}.
  • recursive: Determina se la ricerca sarà ricorsiva, includendo i tag annidati. Valore predefinito True.
  • string: Cerca tag contenenti un testo specifico.
  • limit: Imposta il numero massimo di risultati da restituire. Se specificato, il metodo restituirà al massimo limit elementi.
  • kwargs: Parametri aggiuntivi per filtrare gli attributi del tag.

Esempio di utilizzo di find_all

Se find è come una ricerca veloce del libro giusto sugli scaffali, find_all è un approccio più dettagliato, come se stessi leggendo ogni intestazione della sezione per capire meglio.

Python

all_links = soup.find_all('a')  # Trova tutti i tag <a>

for link in all_links:
    print(link.get('href'))  # Stampa i link: http://example.com/elsie, http://example.com/lacie, http://example.com/tillie

In questo esempio troviamo tutti i tag <a> e quindi estraiamo i collegamenti da ciascuno di essi. Utile se devi raccogliere tutti i link su una pagina.

Importante! I metodi find() e find_all() possono essere chiamati non solo sull'oggetto soup, ma su qualsiasi elemento figlio restituito da funzioni come find(), select() ecc.

4. Uso degli attributi per filtrare gli elementi

Ora che abbiamo il controllo sulla nostra sete di dati, è il momento di essere più specifici. I metodi find e find_all consentono di filtrare gli elementi in base agli attributi. È come impostare un filtro sulla macchina del caffè per ottenere proprio quella bevanda che desideri.

Python

link_with_id = soup.find('a', id='link2')  # Trova il tag <a> con id='link2'

print(link_with_id.text)  # Stampa: Lacie

Usando il parametro id, abbiamo trovato rapidamente l'elemento richiesto. Allo stesso modo, si possono usare altri attributi, come class.

Python

links_with_class = soup.find_all('a', class_='sister')  # Trova tutti i tag <a> con class='sister'

for link in links_with_class:
    print(link.get('id'))  # Stampa: link1, link2, link3
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION