Metodo BeautifulSoup Find: guida definitiva all’uso di Soup.Find per analizzare i dati

Il metodo di ricerca BeautifulSoup è uno dei metodi che puoi utilizzare per analizzare ed estrarre i dati necessari in un documento web. Entra ora per scoprire come utilizzarlo per un’estrazione efficace dei dati dal web.

Metodo di ricerca BeautifulSoup

Per alcuni target web, una dose di richieste + BeautifulSoup è tutto ciò che serve per racimolarli in termini di librerie necessarie. BeautifulSoup fa un buon lavoro nel racchiudere il parser preferito (o quello scelto da lui stesso) per aiutare a estrarre i dati su una pagina. Supporta molteplici metodi di identificazione ed estrazione dei dati che vanno dal metodo del selettore CSS soup.select() a metodi del calibro di soup.find_all e soup.find. Questa non è una guida definitiva per l’estrazione. L’articolo si concentra principalmente sul metodo soup.find(). Imparerai tutto ciò che devi sapere sul metodo soup.find e su come utilizzarlo.


Cos’è Soup.find in BeautifulSoup?

Il metodo soup.find() si trova nella libreria BeautifulSoup. Questo metodo viene utilizzato su un oggetto BeautifulSoup per trovare un elemento che corrisponde al suo parametro. Se hai bisogno di trovare un elemento sei sicuro che sia solo uno utilizzando il suo ID, tag elemento o classe, tra gli altri. Se lo usi per trovare un elemento quando il numero di elementi che soddisfano i criteri è maggiore di uno, viene restituito solo il primo elemento, gli altri elementi vengono tralasciati.

Il metodo find è molto diverso dal metodo find_all, che restituisce un elenco di elementi, poiché il metodo find restituisce solo un elemento. Quindi, perché dovrai scorrere il risultato per ottenere l’elemento di interesse come nel caso di find_all, puoi agire immediatamente se è disponibile, oppure restituirà None.


Come utilizzare il metodo Soup.Find in BeautifulSoup

Ora che sai qual è il metodo, è tempo che tu sappia come utilizzarlo per trovare i dati che desideri. Innanzitutto, per arrivare a questa pagina, presumo che tu abbia già installato BeautifulSoup sul tuo computer. Se non l’hai già fatto, puoi leggere la nostra guida all’installazione di BeautifulSoup. È abbastanza semplice poiché BeautifulSoup è disponibile su PyPi e può essere installato utilizzando il comando pip install.

Come affermato in precedenza, il metodo find è pensato per trovare solo un elemento o elemento su una pagina. Quando più elementi soddisfano la query, lo strumento restituirà solo il primo, quindi informati bene sulla pagina che desideri analizzare prima di utilizzare il metodo di ricerca. Di seguito sono riportati i modi in cui puoi trovare gli elementi utilizzando il metodo soup.find().


  • Trova un elemento in base al nome del tag

Se il tuo target su una pagina è disponibile come unico in termini di tag, ovvero non condivide il tag con nessun altro elemento, è facile recuperarlo. Prendiamo, ad esempio, se hai un solo elemento di tabella, puoi utilizzare il metodo find per individuarlo facilmente senza scrivere codice complicato. Di seguito è riportato un codice per farlo utilizzando il metodo di ricerca BeautifulSoup.

#find table elements

…

soup = BeautifulSoup(page_html)

table_element = soup.find(“table”)

print(table_element)

Come puoi vedere sopra, ho fornito solo il nome del tag della tabella come argomento e lo ha restituito. Se ci fossero due tabelle, restituirebbe solo la prima che incontra.


  • Ricerca dell’elemento per classe o nome ID

Nella progettazione di una pagina Web, agli elementi della pagina vengono assegnati ID e nomi di classe per scopi di stile e interazione. Puoi usarlo da solo mentre esegui il web scraping. Con questo, puoi decidere di omettere il nome del tag e utilizzare solo il nome o l’ID della classe. Tuttavia, è meglio specificare il nome del tag per renderlo più efficace. Di seguito è riportato come utilizzare l’elemento find per ottenere un elemento utilizzando il suo ID o il nome della classe.

soup = BeautifulSoup(page_html)

#find element by ID

eID = soup.find(“a”, id=“price_link”)

#find element by class name

eClassName = soup.find(“tr”, class_=“product-items”)

print(eID)

print(eClassName)

Nel codice sopra puoi vedere che ho aggiunto un carattere di sottolineatura alla classe (class_). Questo perché è una parola chiave in Python e non è consentita.


  • Ricerca di elementi per attributo

Un altro modo per trovare un elemento è utilizzare il suo attributo. Supponiamo che tu voglia trovare un elemento collegamento con il colore rosso, puoi utilizzare il metodo trova. Di seguito è riportato un codice su come eseguire questa operazione.

soup.find(‘a’, attrs={‘color’: ‘red’})

Domande frequenti sul metodo di ricerca BeautifulSoup

D. Cosa succede quando il metodo Trova non ottiene l’elemento?

Se l’elemento desiderato non è stato trovato nel nome, il metodo find non restituirà un errore, ma restituirà invece None. Tuttavia, verrà sollevata un’eccezione quando si tenta di agire in base al risultato. Poiché il risultato restituito è None, se provi a ottenere qualche dettaglio da esso o anche ad agire su di esso, otterrai semplicemente un’eccezione. Per evitare ciò, dovresti sempre controllare il tipo dell’elemento restituito ed essere sicuro che abbia un elemento prima di decidere di agire su di esso.

D. Qual è lo scenario migliore per utilizzare Trova in BeautifulSoup?

Il metodo find è utilizzato al meglio quando desideri trovare solo un elemento che sai essere una classe, un ID o un attributo univoco. Se condivide uno di questi con qualsiasi altro elemento, find non sarà il metodo migliore da utilizzare a meno che l’elemento con cui lo condivide non abbia lo stesso nome di tag. Se ignori questo, potresti finire per ottenere l’elemento sbagliato, poiché restituirà il primo elemento che incontra.

D. Qual è la differenza tra Find e Find_All in BeautifulSoup?

Dal nome puoi capire che mentre find è pensato per trovare un solo elemento, find_all è pensato per trovare più elementi. Find restituirà l’elemento di cui hai bisogno e potrai iniziare ad agire su di esso immediatamente. Per quanto riguarda l’elemento find_all, anche se c’è un solo elemento, ti viene restituita una lista. Tieni questo in mente mentre usi questo metodo.


Conclusion

Il metodo find, insieme a select e find_all, sono i metodi messi a disposizione per accedere agli elementi allo scopo di estrarre dati da essi. Trova è in realtà un metodo facile da usare, come puoi vedere da quanto sopra. Tuttavia, devi fare attenzione quando lo usi, poiché potresti ottenere l’elemento sbagliato se l’elemento che stai cercando non è univoco sulla pagina.