Hermosa Sopa

Encontrar nódulos infantiles con sopa hermosa

Encontrar nódulos infantiles con sopa hermosa
La tarea del web scraping requiere la comprensión de cómo están estructuradas las páginas web. Para obtener la información necesaria de las páginas web, es necesario comprender la estructura de las páginas web, analizar las etiquetas que contienen la información necesaria y luego los atributos de esas etiquetas.

Para los principiantes en web scraping con BeautifulSoup, aquí se puede encontrar un artículo que analiza los conceptos de web scraping con esta poderosa biblioteca.

Este artículo es para programadores, analistas de datos, científicos o ingenieros que ya tienen las habilidades para extraer contenido de páginas web usando BeautifulSoup. Si no tiene ningún conocimiento de esta biblioteca, le aconsejo que siga el tutorial de BeautifulSoup para principiantes.

Ahora podemos continuar. Quiero creer que ya tiene instalada esta biblioteca.  Si no es así, puede hacer esto usando el siguiente comando:

pip instalar BeautifulSoup4

Dado que estamos trabajando con la extracción de datos de HTML, necesitamos tener una página HTML básica para practicar estos conceptos en.  Para este artículo, usaríamos este fragmento de HTML para practicar. Voy a asignar el siguiente fragmento de HTML a una variable usando las comillas triples en Python.

sample_content = "" "

LinuxHint



Para hacer una lista desordenada, se usa la etiqueta ul:
 




Para hacer una lista ordenada, se usa la etiqueta ol:
 


    Aquí hay una lista ordenada
  1. Número uno

  2. Número dos



Sugerencia de Linux, 2018



"" "

Ahora que lo hemos solucionado, pasemos a trabajar con la biblioteca BeautifulSoup.

Vamos a utilizar un par de métodos y atributos que llamaríamos a nuestro objeto BeautifulSoup. Sin embargo, necesitaríamos analizar nuestra cadena usando BeautifulSoup y luego asignar a una variable "our_soup".

desde bs4 importar BeautifulSoup como bso
our_soup = bso (sample_content, "lxml")

De ahora en adelante, estaríamos trabajando con la variable "our_soup" y llamando a todos nuestros atributos o métodos en ella.

En una nota rápida, si aún no sabe qué es un nodo hijo, es básicamente un nodo (etiqueta) que existe dentro de otro nodo. En nuestro fragmento de HTML, por ejemplo, las etiquetas li son nodos secundarios de las etiquetas "ul" y "ol".

Estos son los métodos que veríamos:

findChild ():

La findChild El método se utiliza para encontrar el primer nodo hijo de elementos HTML. Por ejemplo, cuando echamos un vistazo a nuestras etiquetas "ol" o "ul", encontramos dos etiquetas secundarias en ellas. Sin embargo, cuando usamos el findChild método, solo devuelve el primer nodo como nodo hijo.

Este método podría resultar muy útil cuando queremos obtener solo el primer nodo hijo de un elemento HTML, ya que devuelve el resultado requerido de inmediato.

El objeto devuelto es del tipo bs4.elemento.Etiqueta. Podemos extraer el texto de él llamando al atributo de texto en él.

He aquí un ejemplo:

first_child = our_soup.encontrar ("cuerpo").encontrar ("ol")
imprimir (primer_hijo.findChild ())

El código anterior devolvería lo siguiente:

  • Número uno
  • Para obtener el texto de la etiqueta, llamamos al texto atributo en él.

    Como:

    imprimir (primer_hijo.findChild ().texto)

    Para obtener el siguiente resultado:

    'Número uno'
    findChildren ():

    Hemos echado un vistazo a findChild método y visto cómo funciona. La findChildren El método funciona de manera similar, sin embargo, como su nombre lo indica, no encuentra solo un nodo secundario, obtiene todos los nodos secundarios en una etiqueta.

    Cuando necesita obtener todos los nodos secundarios en una etiqueta, el findChildren el método es el camino a seguir. Este método devuelve todos los nodos secundarios en una lista, puede acceder a la etiqueta de su elección usando su número de índice.

    He aquí un ejemplo:

    first_child = our_soup.encontrar ("cuerpo").encontrar ("ol")
    imprimir (primer_hijo.findChildren ())

    Esto devolvería los nodos secundarios en una lista:

    [
  • Número uno
  • ,
  • Número dos
  • ]

    Para obtener el segundo nodo hijo en la lista, el siguiente código haría el trabajo:

    imprimir (primer_hijo.findChildren () [1])

    Para obtener el siguiente resultado:

  • Número dos
  • Eso es todo lo que ofrece BeautifulSoup cuando se trata de métodos. Sin embargo, no termina ahí. Los atributos también se pueden llamar en nuestros objetos BeautifulSoup para obtener el nodo hijo / hijos / descendiente de un elemento HTML.

    contenido:

    Mientras que la findChildren El método hizo el trabajo sencillo de extraer los nodos secundarios, el contenido atributos hace algo un poco diferente.

    La contenido El atributo devuelve una lista de todo el contenido de un elemento HTML, incluidos los nodos secundarios. Así que cuando llames al contenido atributo en un objeto BeautifulSoup, devolvería el texto como cadenas y los nodos en las etiquetas como un bs4.elemento.Etiqueta objeto.

    He aquí un ejemplo:

    first_child = our_soup.encontrar ("cuerpo").encontrar ("ol")
    imprimir (primer_hijo.contenido)

    Esto devuelve lo siguiente:

    ["\ n Aquí hay una lista ordenada \ n",
  • Número uno
  • ,
    '\norte',
  • Número dos
  • , '\norte']

    Como puede ver, la lista contiene el texto que viene antes de un nodo hijo, el nodo hijo y el texto que viene después del nodo hijo.

    Para acceder al segundo nodo hijo, todo lo que tenemos que hacer es hacer uso de su número de índice como se muestra a continuación:

    imprimir (primer_hijo.contenido [3])

    Esto devolvería lo siguiente:

  • Número dos
  • niños:

    Aquí hay un atributo que hace casi lo mismo que el atributo de contenido. Sin embargo, tiene una pequeña diferencia que podría tener un gran impacto (para aquellos que se toman en serio la optimización del código).

    El atributo hijos también devuelve el texto que viene antes de un nodo hijo, el nodo hijo en sí mismo y el texto que viene después del nodo hijo. La diferencia aquí es que los devuelve como un generador en lugar de una lista.

    Echemos un vistazo al siguiente ejemplo:

    first_child = our_soup.encontrar ("cuerpo").encontrar ("ol")
    imprimir (primer_hijo.niños)

    El código anterior da los siguientes resultados (la dirección en su máquina no tiene que coincidir con la siguiente):

    Como puede ver, solo devuelve la dirección del generador. Podríamos convertir este generador en una lista.

    Podemos ver esto en el siguiente ejemplo:

    first_child = our_soup.encontrar ("cuerpo").encontrar ("ol")
    imprimir (lista (primer_hijo.niños))

    Esto da el siguiente resultado:

    ["\ n Aquí hay una lista ordenada \ n",
  • Número uno
  • ,
    '\norte',
  • Número dos
  • , '\norte']

    descendientes:

    Mientras que la niños El atributo funciona para obtener solo el contenido dentro de una etiqueta i.mi. el texto, y los nodos en el primer nivel, el descendientes El atributo va más profundo y hace más.

    La descendientes atributo obtiene todo el texto y los nodos que existen en los nodos secundarios. Por lo tanto, no devuelve solo nodos secundarios, también devuelve nodos nietos.

    Además de devolver el texto y las etiquetas, también devuelve el contenido de las etiquetas como cadenas.

    Como el niños atributo, descendientes devuelve sus resultados como generador.

    Podemos ver esto a continuación:

    first_child = our_soup.encontrar ("cuerpo").encontrar ("ol")
    imprimir (primer_hijo.descendientes)

    Esto da el siguiente resultado:

    Como se vio anteriormente, podemos convertir este objeto generador en una lista:

    first_child = our_soup.encontrar ("cuerpo").encontrar ("ol")
    imprimir (lista (primer_hijo.descendientes))

    Obtendríamos la lista a continuación:

    ["\ n Aquí hay una lista ordenada \ n",
  • Número uno
  • ,
    'Número uno', '\ n',
  • Número dos
  • , 'Número dos', '\ n']

    Conclusión

    Ahí lo tienes, cinco formas diferentes de acceder a los nodos secundarios en elementos HTML. Podría haber más formas, sin embargo, con los métodos y atributos discutidos en este artículo, uno debería poder acceder al nodo hijo de cualquier elemento HTML.

    Herramientas útiles para jugadores de Linux
    Si le gusta jugar juegos en Linux, es probable que haya utilizado aplicaciones y utilidades como Wine, Lutris y OBS Studio para mejorar la experiencia...
    Juegos HD remasterizados para Linux que nunca tuvieron un lanzamiento de Linux antes
    Muchos desarrolladores y editores de juegos están creando una remasterización HD de juegos antiguos para extender la vida útil de la franquicia, por f...
    Cómo usar AutoKey para automatizar juegos de Linux
    AutoKey es una utilidad de automatización de escritorio para Linux y X11, programada en Python 3, GTK y Qt. Usando su funcionalidad de scripting y MAC...