BeautifulSoup Find_All: guida definitiva all’utilizzo di Findall per analizzare i dati

Stai cercando come utilizzare in modo efficace e corretto il metodo find_all di BeautifulSoup? Allora entra subito e scopri i diversi metodi e modi per utilizzarlo per analizzare i dati di cui hai bisogno.

BeautifulSoup Trova tutto

BeautifulSoup è piuttosto popolare tra gli sviluppatori di web scraper in Python. Viene utilizzato insieme alle richieste Python o ad altri moduli per estrarre dati dalle pagine Web. Contrariamente a quanto potresti pensare, BeautifulSoup non è un parser autonomo. Comprende il parser che preferisci (html.parser è quello predefinito). Per aiutare a estrarre i dati dalle pagine web. Il vantaggio di BeautifulSoup è la sua facilità d’uso, poiché puoi attraversare documenti HTML per estrarre i dati necessari utilizzando API simili a jQuery.

Uno dei metodi più diffusi forniti da BeautifulSoup è il metodo find_all(). È uno dei metodi per accedere a un elemento e al suo contenuto in una pagina. Altri includono metodi di ricerca e selezione.


Cos’è Find_all in BeautifulSoup?

Il metodo find_all() in BeautifulSoup è uno dei potenti metodi di estrazione che puoi utilizzare per trovare tutti gli elementi in un documento HTML o XML che corrispondono alle tue query definite come parametri nel metodo find_all. La ricerca prende la tua query, che può essere l’ID, il nome della classe o gli attributi di un elemento o anche un’istruzione REGEX (espressione regolare) e restituisce un array contenente gli elementi che corrispondono alle tue query.

Tutto ciò che viene restituito sono gli elementi di un array. Devi scorrere l’array per raggiungere gli elementi specifici ed estrarre i dati specifici che ti interessano. Sebbene potresti utilizzare l’ID come parametro per il metodo find_all(), ho consigliato di utilizzare invece il metodo find() se tutti ciò di cui hai bisogno è trovare solo un elemento: find_all serve per trovare più elementi e non è adatto per la ricerca in base all’ID poiché gli ID devono essere solo uno e univoci.


Come utilizzare il metodo Find_all in Beautifulsoup

In questa sezione della guida ti mostrerò come utilizzare il metodo find_all per trovare gli elementi che desideri su una pagina. Innanzitutto, affinché tu possa arrivare specificamente a questa pagina, presumo che tu abbia già installata la libreria BeautifulSoup e sappia anche come caricarvi il contenuto per creare una zuppa. Quindi salterò tutta quella parte. Ciò che imparerai qui include l’utilizzo del metodo find_all per trovare elementi per tag, nome di classe, ID, stringa di testo, criteri multipli e istruzioni di espressione regolare.


  • Ricerca di elementi per nome tag

Il modo più semplice per utilizzare find_all() è utilizzarlo per trovare un elemento su una pagina utilizzando il nome del tag dell’elemento. Supponiamo che tu voglia trovare tutti i collegamenti su una pagina, tutto ciò che devi fare è fornire l’elemento ancoraggio come argomento come scritto di seguito.

# Find all URLs on a page

URL_list = soup.find_all(“a”)

for URL in URL_list:

    print(URL.get_text())

Una cosa che ti piacerà del metodo find_all è che puoi fornire un limite al numero di elementi che desideri raccogliere. Puoi utilizzare l’argomento limit per far sì che restituisca solo un numero specifico di elementi, come mostrato di seguito.

soup.find(‘a’, limit=10)

  • Ricerca di elementi per nome o ID classe

Se agli elementi è assegnato un nome di classe o un ID, puoi utilizzare rapidamente il metodo find_all per raccoglierli tutti. Tuttavia, il primo argomento inserito dovrebbe essere il nome del tag degli elementi. Di seguito è riportato come trovare elementi in base al nome della classe e agli ID in un documento utilizzando il metodo find_all di BeautifulSoup.

# Find all tr elements with the class name as country

soup.find_all(‘tr’, class_=‘country’)

#find p element with ID actual_price

soup.find_all(‘p’, id=‘actual_price’)

Nota: Notare class ciò che è scritto con un _ finale (class_). Questo perché class è una parola chiave inversa in Python. Inoltre, ricorda che ho detto che anche se potresti utilizzare il metodo find_all per trovare elementi in base agli ID, è meglio utilizzare il metodo find() poiché è più adatto.


  • Ricerca di elementi per attributi

Un altro modo in cui puoi utilizzare il metodo find_all è trovare elementi che hanno un attributo specifico che conosci. Diciamo che gli elementi di ancoraggio (a) hanno l’elemento visibilità impostato su nascosto. Di seguito è riportato come trovarli tutti. Ciò è particolarmente utile per evitare le trappole honeypot.

soup.find_all(‘a’, attrs={‘visibility’: ‘hidden’})

  • Trovare elementi tramite testo ed espressione regolare

A volte, tutto ciò che desideri è che il metodo restituisca un elenco di stringhe che corrispondono a una particolare stringa di testo. Se conosci il testo, potresti usarlo apertamente o usare un’istruzione REGEX per restituirlo. Di seguito è riportato come eseguirli.

import re

#find exact string of texts

soup.find_all(string=“call me”)

#find strings that contain ‘call me”

soup.find_all(string=re.compile(‘call me’))

Domande frequenti su BeautifulSoup Find_All

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

Entrambi i metodi vengono utilizzati per trovare elementi su una pagina. Tuttavia, il metodo find() viene utilizzato per restituire solo il primo elemento che incontra e che corrisponde alla query, mentre gli altri elementi vengono ignorati. D’altra parte, il metodo find_all() viene utilizzato per trovare tutti gli elementi che corrispondono ai tuoi criteri. Dovresti utilizzare l’elemento find solo quando prevedi un elemento e find_all per più elementi.

D. Qual è la differenza tra Select e Find_all in BeautifulSoup?

Il metodo select in BeautifulSoup può essere utilizzato anche per trovare elementi in un documento HTML o XML e restituisce anche un elenco. Tuttavia, accetta solo selettori CSS come criteri, rendendolo più semplice per chi ha un background web. Find_all, d’altra parte, è più avanzato e accetta filtri e molti altri argomenti.


Conclusion

Da quanto sopra, puoi vedere come utilizzare il metodo find_all() in BeautifulSoup per trovare tutti gli elementi che corrispondono alla tua query in un documento. Il metodo è abbastanza facile da usare se lo capisci bene. Ma per concludere questa guida, devo dirti di fare attenzione alla velocità con cui viene caricato il contenuto di una pagina poiché solo il contenuto della pagina scaricato può aiutarti a vedere la bellezza del metodo find_all in BeautifulSoup.