Encuentra etiquetas por clase CSS usando BeautifulSoup

En este artículo, discutiremos cómo encontrar etiquetas por CSS usando BeautifulSoup. Nos dan un documento HTML, necesitamos encontrar y extraer etiquetas del documento usando la clase CSS.

Ejemplos:

HTML Document:
<html>
<head>
    <title> Geeksforgeeks </title>
</head>
<body>
    <div class="ext" >Extract this tag</div>
</body>
</html>

Output:
<div class="ext" >Extract this tag</div>

Módulos Requeridos:

  • bs4: es una biblioteca de python utilizada para extraer datos de HTML, XML y otros lenguajes de marcado. 
    Asegúrese de tener pip instalado en su sistema.
    Ejecute el siguiente comando en la terminal para instalar esta biblioteca:
pip install bs4
or
pip install beautifulsoup4

Acercarse:

  • Importar biblioteca bs4
  • Crear un documento HTML
  • Analizar el contenido en un objeto BeautifulSoup
  • Búsqueda por clase CSS:   el nombre del atributo CSS, «clase» , es una palabra reservada en Python. El compilador da un error de sintaxis si la clase se usa como argumento de palabra clave. Podemos buscar clases CSS usando el argumento de palabra clave class_
    Podemos pasar class_ una string, una expresión regular, una función o True.
  • find_all() con el argumento de palabra clave class_ se usa para encontrar todas las etiquetas con la clase CSS dada.
    Si necesitamos encontrar solo una etiqueta, se usa find()
  • Imprime las etiquetas extraídas.

Ejemplo 1: Encuentra la etiqueta usando el método find()

Python3

# Import Module
from bs4 import BeautifulSoup
 
# HTML Document
HTML_DOC = """
              <html>
               <head>
                   <title> Geeksforgeeks </title>
               </head>
               <body>
                   <div class="ext" >Extract this tag</div>
               </body>
             </html>
            """
 
# Function to find tags
def find_tags_from_class(html):
 
    # parse html content
    soup = BeautifulSoup(html, "html.parser")
 
    # find tags by CSS class
    div = soup.find("div", class_= "ext")
 
    # Print the extracted tag
    print(div)
 
# Function Call
find_tags_from_class(HTML_DOC)

Producción:

Ejemplo 2: Encuentra todas las etiquetas usando el método find_all()

Python3

# Import Module
from bs4 import BeautifulSoup
 
# HTML Document
HTML_DOC = """
              <html>
               <head>
                   <title> Table Data </title>
               </head>
               <body>
                <table>
                   <tr>
                    <td class = "table-row"> This is row 1 </td>
                    <td class = "table-row"> This is row 2 </td>
                    <td class = "table-row"> This is row 3 </td>
                    <td class = "table-row"> This is row 4 </td>
                    <td class = "table-row"> This is row 5 </td>
                   </tr>
                </table>
               </body>
             </html>
            """
 
# Function to find tags
def find_tags_from_class(html):
 
    # parse html content
    soup = BeautifulSoup(html, "html.parser")
 
    # find tags by CSS class
    rows = soup.find_all("td", class_= "table-row")
 
    # Print the extracted tag
    for row in rows:
        print(row)
 
# Function Call
find_tags_from_class(HTML_DOC)

Producción:

Ejemplo 3: Encontrar etiquetas por clase CSS usando expresiones regulares. 

Python3

# Import Module
from bs4 import BeautifulSoup
import re
 
# HTML Document
HTML_DOC = """
              <html>
               <head>
                   <title> Table Data </title>
               </head>
               <body>
                <table>
                   <tr>
                    <td class = "table"> This is row 1 </td>
                    <td class = "table-row"> This is row 2 </td>
                    <td class = "table"> This is row 3 </td>
                    <td class = "table-row"> This is row 4 </td>
                    <td class = "table"> This is row 5 </td>
                   </tr>
                </table>
               </body>
             </html>
            """
 
# Function to find tags
def find_tags_from_class(html):
 
    # parse html content
    soup = BeautifulSoup(html, "html.parser")
 
    # find tags by CSS class using regular expressions
    # $ is used to match pattern ending with
    # Here we are finding class that ends with "row"
    rows = soup.find_all("td", class_= re.compile("row$"))
 
    # Print the extracted tag
    for row in rows:
        print(row)
 
# Function Call
find_tags_from_class(HTML_DOC)

Producción:

Explicación:

<td class="table-row"> This is row 2 </td>
<td class="table-row"> This is row 4 </td>

Por encima de las dos etiquetas, el nombre de la clase termina en «fila». Por lo tanto, se extraen. El nombre de la clase de otras etiquetas no termina con «fila». Por lo tanto, no se extraen.

Ejemplo 4: Encontrar etiquetas por clase CSS utilizando la función definida por el usuario.

Python3

# Import Module
from bs4 import BeautifulSoup
 
# HTML Document
HTML_DOC = """
              <html>
               <head>
                   <title> Table Data </title>
               </head>
               <body>
                <table>
                   <tr>
                    <td class = "table"> This is invalid because len(table) != 3 </td>
                    <td class = "row"> This is valid because len(row) == 3 </td>
                    <td class = "data"> This is invalid because len(data) != 3 </td>
                    <td class = "hii"> This is valid because len(hii) == 3 </td>
                    <td> This is invalid because class is None </td>
                   </tr>
                </table>
               </body>
             </html>
            """
 
# Returns true if the css_class is not None
# and length of css_class is equal to 3
# else returns false
def has_three_characters(css_class):
    return css_class is not None and len(css_class) == 3
 
 
# Function to find tags
def find_tags_from_class(html):
 
    # parse html content
    soup = BeautifulSoup(html, "html.parser")
 
    # find tags by CSS class using user-defined function
    rows = soup.find_all("td", class_= has_three_characters)
 
    # Print the extracted tag
    for row in rows:
        print(row)
 
# Function Call
find_tags_from_class(HTML_DOC)

Producción:

Ejemplo 5: Encontrar etiquetas por clase CSS de un sitio web

Python3

# Import Module
from bs4 import BeautifulSoup
import requests
 
# Assign website
import requests
URL = "https://www.geeksforgeeks.org/"
HTML_DOC = requests.get(URL)
 
# Function to find tags
def find_tags_from_class(html):
 
    # parse html content
    soup = BeautifulSoup(html.content, "html5lib")
 
    # find tags by CSS class
    div = soup.find("div", class_= "article--container_content")
 
    # Print the extracted tag
    print(div)
 
# Function Call
find_tags_from_class(HTML_DOC)

Producción:

Publicación traducida automáticamente

Artículo escrito por yuvraj_chandra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *