bellazuppa

Trovare i nodi dei bambini con una bella zuppa

Trovare i nodi dei bambini con una bella zuppa
Il compito del web scraping richiede la comprensione di come sono strutturate le pagine web. Per ottenere le informazioni necessarie dalle pagine Web, è necessario comprendere la struttura delle pagine Web, analizzare i tag che contengono le informazioni necessarie e quindi gli attributi di tali tag.

Per i principianti nel web scraping con BeautifulSoup, un articolo che discute i concetti di web scraping con questa potente libreria può essere trovato qui.

Questo articolo è per programmatori, analisti di dati, scienziati o ingegneri che hanno già le competenze per estrarre contenuti da pagine Web utilizzando BeautifulSoup. Se non hai alcuna conoscenza di questa libreria, ti consiglio di seguire il tutorial BeautifulSoup per principianti.

Ora possiamo procedere: voglio credere che tu abbia già installato questa libreria.  In caso contrario, puoi farlo utilizzando il comando seguente:

pip install BeautifulSoup4

Poiché stiamo lavorando con l'estrazione di dati dall'HTML, abbiamo bisogno di una pagina HTML di base su cui praticare questi concetti.  Per questo articolo, useremmo questo frammento HTML per fare pratica. Assegnerò il seguente frammento HTML a una variabile usando le virgolette triple in Python.

sample_content = """

LinuxSuggerimento



Per creare un elenco non ordinato, viene utilizzato il tag ul:
 




Per creare un elenco ordinato, viene utilizzato il tag ol:
 


    Ecco una lista ordinata
  1. Numero uno

  2. Numero due



Suggerimento Linux, 2018



"""

Ora che abbiamo risolto il problema, passiamo subito al lavoro con la libreria BeautifulSoup.

Utilizzeremo un paio di metodi e attributi che chiameremo sul nostro oggetto BeautifulSoup. Tuttavia, dovremmo analizzare la nostra stringa utilizzando BeautifulSoup e quindi assegnarla a una variabile "our_soup".

da bs4 importa BeautifulSoup come bso
nostra_zuppa = bso(sample_content, "lxml")

D'ora in poi, lavoreremo con la variabile "our_soup" e chiameremo tutti i nostri attributi o metodi su di essa.

In breve, se non sai già cos'è un nodo figlio, è fondamentalmente un nodo (tag) che esiste all'interno di un altro nodo. Nel nostro frammento HTML, ad esempio, i tag li sono nodi figli di entrambi i tag "ul" e "ol".

Ecco i metodi che esamineremo:

trovaFiglio():

Il trovaBambino viene utilizzato per trovare il primo nodo figlio di elementi HTML. Ad esempio, quando diamo un'occhiata ai nostri tag "ol" o "ul", troveremo due tag bambini in esso. Tuttavia, quando usiamo il trovaBambino metodo, restituisce solo il primo nodo come nodo figlio.

Questo metodo potrebbe rivelarsi molto utile quando si vuole ottenere solo il primo nodo figlio di un elemento HTML, in quanto restituisce subito il risultato richiesto.

L'oggetto restituito è del tipo bs4.elemento.Etichetta. Possiamo estrarre il testo da esso chiamando l'attributo text su di esso.

Ecco un esempio:

first_child = our_soup.trova ("corpo").trova("ol")
print(first_child.trovaFiglio())

Il codice sopra restituirebbe quanto segue:

  • Numero uno
  • Per ottenere il testo dal tag, chiamiamo il testo attributo su di esso.

    Piace:

    print(first_child.trovafiglio().testo)

    Per ottenere il seguente risultato:

    'Numero uno'
    trovaBambini():

    Abbiamo dato un'occhiata al trova bambino metodo e visto come funziona. Il trovaBambini Il metodo funziona in modo simile, tuttavia, come suggerisce il nome, non trova solo un nodo figlio, ma ottiene tutti i nodi figlio in un tag.

    Quando hai bisogno di ottenere tutti i nodi figli in un tag, il trovaBambini il metodo è la strada da percorrere. Questo metodo restituisce tutti i nodi figli in un elenco, puoi accedere al tag di tua scelta usando il suo numero di indice.

    Ecco un esempio:

    first_child = our_soup.trova ("corpo").trova("ol")
    print(first_child.trova bambini())

    Ciò restituirebbe i nodi figli in un elenco:

    [
  • Numero uno
  • ,
  • Numero due
  • ]

    Per ottenere il secondo nodo figlio nell'elenco, il seguente codice farebbe il lavoro:

    print(first_child.trovaBambini()[1])

    Per ottenere il seguente risultato:

  • Numero due
  • Questo è tutto ciò che BeautifulSoup offre quando si tratta di metodi. Tuttavia, non finisce qui. Gli attributi possono anche essere chiamati sui nostri oggetti BeautifulSoup per ottenere il nodo figlio/figli/discendente da un elemento HTML.

    Contenuti:

    Mentre il trovaBambini ha fatto il semplice lavoro di estrarre i nodi figli, il, Contenuti gli attributi fanno qualcosa di un po' diverso.

    Il Contenuti attributo restituisce un elenco di tutto il contenuto in un elemento HTML, inclusi i nodi figli children. Quindi quando chiami il Contenuti attributo su un oggetto BeautifulSoup, restituirebbe il testo come stringhe e i nodi nei tag come a bs4.elemento.Etichetta oggetto.

    Ecco un esempio:

    first_child = our_soup.trova ("corpo").trova("ol")
    print(first_child.Contenuti)

    Questo restituisce quanto segue:

    ["\n   Ecco un elenco ordinato\n   ",
  • Numero uno
  • ,
    '\n',
  • Numero due
  • , '\n']

    Come puoi vedere, l'elenco contiene il testo che precede un nodo figlio, il nodo figlio e il testo che viene dopo il nodo figlio.

    Per accedere al secondo nodo figlio, tutto ciò che dobbiamo fare è utilizzare il suo numero di indice come mostrato di seguito:

    print(first_child.contenuto[3])

    Ciò restituirebbe quanto segue:

  • Numero due
  • bambini:

    Ecco un attributo che fa quasi la stessa cosa dell'attributo dei contenuti. Tuttavia, ha una piccola differenza che potrebbe avere un impatto enorme (per coloro che prendono sul serio l'ottimizzazione del codice).

    L'attributo children restituisce anche il testo che viene prima di un nodo figlio, il nodo figlio stesso e il testo che viene dopo il nodo figlio. La differenza qui è che li restituisce come un generatore invece di un elenco.

    Diamo un'occhiata al seguente esempio:

    first_child = our_soup.trova ("corpo").trova("ol")
    print(first_child.bambini)

    Il codice sopra fornisce i seguenti risultati (l'indirizzo sulla tua macchina non deve coincidere con quello sotto):

    Come puoi vedere, restituisce solo l'indirizzo del generatore. Potremmo convertire questo generatore in una lista.

    Possiamo vederlo nell'esempio qui sotto:

    first_child = our_soup.trova ("corpo").trova("ol")
    print(list(first_child.bambini))

    Questo dà il seguente risultato:

    ["\n        Ecco un elenco ordinato\n        ",
  • Numero uno
  • ,
    '\n',
  • Numero due
  • , '\n']

    discendenti:

    Mentre il bambini l'attributo funziona per ottenere solo il contenuto all'interno di un tag i.e. il testo, e i nodi al primo livello, il discendenti l'attributo va più in profondità e fa di più.

    Il discendenti attributo ottiene tutto il testo e i nodi che esistono nei nodi figli. Quindi non restituisce solo nodi figli, ma restituisce anche nodi nipoti.

    Oltre a restituire il testo e i tag, restituisce anche il contenuto dei tag come stringhe.

    Proprio come il bambini attributo, discendenti restituisce i suoi risultati come generatore.

    Lo possiamo vedere di seguito:

    first_child = our_soup.trova ("corpo").trova("ol")
    print(first_child.discendenti)

    Questo dà il seguente risultato:

    Come visto in precedenza, possiamo quindi convertire questo oggetto generatore in una lista:

    first_child = our_soup.trova ("corpo").trova("ol")
    print(list(first_child.discendenti))

    Otterremmo la lista qui sotto:

    ["\n   Ecco un elenco ordinato\n   ",
  • Numero uno
  • ,
    'Numero uno', '\n',
  • Numero due
  • , 'Numero due', '\n']

    Conclusione

    Ecco qua, cinque modi diversi per accedere ai nodi figli negli elementi HTML. Potrebbero esserci più modi, tuttavia con i metodi e gli attributi discussi in questo articolo si dovrebbe essere in grado di accedere al nodo figlio di qualsiasi elemento HTML.

    Il cursore salta o si sposta in modo casuale durante la digitazione in Windows 10
    Se scopri che il cursore del mouse salta o si sposta da solo, automaticamente, in modo casuale durante la digitazione nel laptop o nel computer Window...
    Come invertire la direzione di scorrimento del mouse e dei touchpad in Windows 10
    Topo e Touchpads non solo rende l'elaborazione semplice, ma anche più efficiente e richiede meno tempo. Non possiamo immaginare una vita senza questi ...
    Come modificare il puntatore del mouse e le dimensioni, il colore e lo schema del cursore su Windows 10
    Il puntatore del mouse e il cursore in Windows 10 sono aspetti molto importanti del sistema operativo. Questo si può dire anche per altri sistemi oper...