---
title: "find() y find_all() en BeautifulSoup: Guía 2026"
slug: find-all-beautiful-soup
date: 2026-02-16T07:47:41+00:00
modified: 2026-02-16T07:47:42+00:00
permalink: https://brightdata.es/blog/datos-web/find-all-beautiful-soup
type: blog
---

[ Blog ](https://brightdata.es/blog "Blog") / [Datos web](https://brightdata.es/blog/datos-web)







 [Datos web](https://brightdata.es/blog/datos-web)

# find() y find\_all() en BeautifulSoup: Guía 2026

Aprenda a utilizar los métodos find() y find_all() de BeautifulSoup para extraer de forma eficiente datos web por clase, ID, texto y atributos en Python.

 12 min de lectura





 [ ![Jacob Nulty](https://media.brightdata.es/2024/12/Jacob-Nulty-50x50.jpg) ](https://brightdata.com/blog/authors/jake-nulty)

 [Jake Nulty

Technical Writer

 ](https://brightdata.com/blog/authors/jake-nulty)





 ![How To Use BeautifulSoup’s find and find_all blog image](https://media.brightdata.es/2025/01/How-To-Use-BeautifulSoups-find-and-find_all.svg)





`<a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/#:~:text=using%20tag%20names-,The,-simplest%20way%20to" rel="noreferrer noopener nofollow" target="_blank">find()</a>` y `<a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/#:~:text=link1%22%3EElsie%3C/a%3E-,If,-you%20need%20to" rel="noreferrer noopener nofollow" target="_blank">find_all()</a>` son métodos esenciales para [el Scraping web con BeautifulSoup](/blog/how-tos/beautiful-soup-web-scraping), ya que te ayudan a extraer datos de HTML. El método `find()` recupera el primer elemento que coincide con tus criterios, como `find("div")` para obtener el primer `div` de una página, y devuelve `None` si no se encuentra ninguna coincidencia. Por su parte, `find_all()` encuentra todos los elementos que coinciden y los devuelve en forma de lista, lo que lo hace perfecto para extraer múltiples elementos, como todas las etiquetas `div`. Antes de empezar tu aventura de Scraping web con BeautifulSoup, asegúrate de tener instalados tanto Requests como BeautifulSoup.

**Instala las dependencias**

```none
pip install requests

```

```none
pip install beautifulsoup4

```

## <a></a>find()

Familiaricémonos con `find()`. En los ejemplos siguientes, utilizaremos [Quotes To Scrape](https://quotes.toscrape.com/) y [Fake Store API](https://fakestoreapi.com/) para buscar elementos en la página. Ambos sitios web se crearon para el scraping. No cambian mucho, por lo que son perfectos para aprender.

### <a></a>Buscar por clase

Para buscar un elemento utilizando su `clase`, utilizamos la palabra clave `class_`. Quizás te preguntes por qué `class_` y no `class`. En Python, `class` es una palabra clave que se utiliza para crear tipos de datos personalizados. El guión bajo en `class_` evita que esta palabra clave cause conflictos con nuestro código.

El siguiente ejemplo busca el primer `div` con la `clase`: `quote`.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_quote = soup.find("div", class_="quote")
print(first_quote.text)

```

Este es el resultado.

```none
«El mundo tal y como lo hemos creado es un proceso de nuestro pensamiento. No puede cambiarse sin cambiar nuestro pensamiento».
Albert Einstein
(acerca de)

Etiquetas:

cambio
pensamientos profundos
pensamiento
mundo

```

### <a></a>Buscar por ID

Al realizar el scraping, también es habitual buscar elementos utilizando su `id`. En el ejemplo siguiente, utilizamos el argumento `id` para buscar el menú en la página. Aquí, encontramos el menú en la página utilizando su `id`.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://fakestoreapi.com")

soup = BeautifulSoup(response.text, "html.parser")

ul = soup.find("ul", id="menu")

print(ul.text)

```

Este es el menú una vez que lo hemos extraído y lo hemos impreso en la terminal.

```none
Inicio
Documentación
GitHub
Invítame a un café

```

### <a></a>Buscar por texto

También podemos buscar elementos utilizando su texto. Para ello, utilizamos el argumento `string`. El siguiente ejemplo busca el botón `Iniciar sesión` en la página.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

login_button = soup.find("a", string="Login")
print(login_button.text)

```

Como puede ver, se imprime `«Iniciar sesión»` en la consola.

```none
Iniciar sesión

```

### <a></a>Buscar por atributo

También podemos utilizar diferentes atributos para realizar búsquedas más precisas. En esta ocasión, volvemos a buscar la primera cita de la página. Sin embargo, buscamos un `span` con el `itemprop` del `texto`. De nuevo, encontramos nuestra primera cita, pero sin todos los elementos adicionales, como `el autor` y `las etiquetas`.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_clean_quote = soup.find("span", attrs={"itemprop": "text"})

print(first_clean_quote.text)

```

Aquí está la versión limpia de nuestra primera cita.

```none
«El mundo tal y como lo hemos creado es un proceso de nuestro pensamiento. No puede cambiarse sin cambiar nuestro pensamiento».

```

### <a></a>Buscar utilizando múltiples criterios

Como habrás notado anteriormente, el argumento `attr` toma un `diccionario` en lugar de un solo valor. Esto nos permite pasar múltiples criterios para un filtrado aún mejor. Aquí, encontramos al primer autor de la página utilizando los atributos `class` e `itemprop`.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_author = soup.find("small", attrs={"class": "author", "itemprop": "author"})
print(first_author.text)

```

Al ejecutar esto, debería obtener `Albert Einstein` como resultado.

```none
Albert Einstein

```

## <a></a>find\_all()

Ahora, repasemos estos mismos ejemplos utilizando `find_all()`. Una vez más, utilizaremos Quotes to Scrape y la API de Fake Store. Estos ejemplos son casi idénticos, pero con una diferencia importante. `find()` devuelve un solo elemento. `find_all()` devuelve una `lista` de elementos de la página.

### <a></a>Buscar por clase

Para buscar elementos por su `clase`, utilizamos el argumento de palabra clave `class_`. El código siguiente utiliza `find_all()` para extraer cada cita utilizando su clase CSS.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

quotes = soup.find_all("div", class_="quote")

for quote in quotes:
    print("-------------")
    print(quote.text)

```

Cuando extraemos e imprimimos la primera página de citas, queda así.

```none
-------------

«El mundo tal y como lo hemos creado es un proceso de nuestro pensamiento. No se puede cambiar sin cambiar nuestra forma de pensar».
por Albert Einstein
(sobre)

            Etiquetas:

cambio
pensamientos profundos
pensamiento
mundo

-------------

«Son nuestras elecciones, Harry, las que muestran lo que realmente somos, mucho más que nuestras habilidades».
por J.K. Rowling
(sobre)

            Etiquetas:

habilidades
elecciones

-------------

«Solo hay dos formas de vivir la vida. Una es como si nada fuera un milagro. La otra es como si todo fuera un milagro».
Por Albert Einstein.
(Acerca de)

Etiquetas:

inspirador
vida
vivir
milagro
milagros

-------------

«La persona, ya sea caballero o dama, que no disfruta de una buena novela, debe ser intolerablemente estúpida».
Por Jane Austen.
(Acerca de)

            Etiquetas:

analfabetismo
libros
clásico
humor

-------------

«La imperfección es belleza, la locura es genio y es mejor ser absolutamente ridículo que absolutamente aburrido».
Por Marilyn Monroe.
(sobre)

            Etiquetas:

sé tú mismo
inspirador

-------------

«Intenta no convertirte en un hombre de éxito. Más bien, conviértete en un hombre de valor».
Por Albert Einstein.
(sobre)

Etiquetas:

edad adulta
éxito
valor

-------------

«Es mejor ser odiado por lo que eres que ser amado por lo que no eres».
Por André Gide.
(sobre)

            Etiquetas:

vida
amor

-------------

«No he fracasado. Solo he encontrado 10 000 formas que no funcionan».
Por Thomas A. Edison.
(sobre)

            Etiquetas:

edison
fracaso
inspirador
parafraseado

-------------

«Una mujer es como una bolsita de té: nunca sabes lo fuerte que es hasta que la sumerges en agua caliente».
por Eleanor Roosevelt
(sobre)

            Etiquetas:

atribuido erróneamente a Eleanor Roosevelt

-------------

«Un día sin sol es como, ya sabes, la noche».
por Steve Martin
(sobre)

Etiquetas:

humor
obvio
símil

```

### <a></a>Buscar por ID

Como ya comentamos al hablar de `find()`, `id` es otro de los métodos más comunes que puedes utilizar para extraer datos de la página. Para extraer datos utilizando su `id`, utilizamos el `argumento id`… tal y como hicimos anteriormente.

A continuación, buscamos todos los elementos `ul` con un `id` de `menú`. Solo hay un menú, por lo que solo encontraremos uno.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://fakestoreapi.com")

soup = BeautifulSoup(response.text, "html.parser")

uls = soup.find_all("ul", id="menu")

for ul in uls:
    print("-------------")
    print(ul.text)

```

Como solo hay un menú en la página, nuestro resultado es exactamente el mismo que cuando usamos `find()`.

```none
-------------

Inicio
Documentación
GitHub
Invítame a un café

```

### <a></a>Buscar por texto

Ahora extraeremos elementos de una página utilizando su texto. Utilizaremos el argumento `string`. En el ejemplo siguiente, encontramos todos `los` elementos a que contienen la `cadena`: `Login`. Una vez más, solo hay uno.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

login_buttons = soup.find_all("a", string="Login")

for button in login_buttons:
    print("-------------")
    print(button)

```

El resultado debería ser similar a este.

```none
-------------
<a href="/login">Iniciar sesión</a>

```

### <a></a>Buscar por atributo

Cuando pases a realizar scraping en entornos reales, a menudo necesitarás utilizar otros atributos para extraer elementos de la página. ¿Recuerdas lo desordenado que era el resultado del primer ejemplo? En el siguiente fragmento de código, utilizaremos el atributo `itemprop` y esta vez solo extraeremos las citas.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

clean_quotes = soup.find_all("span", attrs={"itemprop": "text"})

for quote in clean_quotes:
    print("-------------")
    print(quote.text)

```

¡Mira qué limpio es nuestro resultado!

```none
-------------
«El mundo tal y como lo hemos creado es un proceso de nuestro pensamiento. No se puede cambiar sin cambiar nuestra forma de pensar».
-------------
«Son nuestras elecciones, Harry, las que muestran lo que realmente somos, mucho más que nuestras habilidades».
-------------
«Solo hay dos formas de vivir la vida. Una es como si nada fuera un milagro. La otra es como si todo fuera un milagro».
-------------
«La persona, ya sea caballero o dama, que no disfruta de una buena novela, debe ser intolerablemente estúpida».
-------------
«La imperfección es belleza, la locura es genio y es mejor ser absolutamente ridículo que absolutamente aburrido».
-------------
«Intenta no convertirte en un hombre de éxito. Más bien, conviértete en un hombre de valor».
-------------
«Es mejor ser odiado por lo que eres que ser amado por lo que no eres».
-------------
«No he fracasado. Solo he encontrado 10 000 formas que no funcionan».
-------------
«Una mujer es como una bolsita de té: nunca sabes lo fuerte que es hasta que la sumerges en agua caliente».
-------------
«Un día sin sol es como, ya sabes, la noche».

```

### <a></a>Búsqueda mediante múltiples criterios

Esta vez, utilizaremos el argumento `attrs` de una forma más compleja. Aquí, buscamos todos los elementos `pequeños` que tienen una `clase` de `autor` **y** un `itemprop` de `autor`. Lo hacemos pasando ambos atributos a nuestro diccionario `attrs`.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

authors = soup.find_all("small", attrs={"class": "author", "itemprop": "author"})

for author in authors:
    print("-------------")
    print(author.text)

```

Aquí está nuestra lista de autores en la consola.

```none
-------------
Albert Einstein
-------------
J.K. Rowling
-------------
Albert Einstein
-------------
Jane Austen
-------------
Marilyn Monroe
-------------
Albert Einstein
-------------
André Gide
-------------
Thomas A. Edison
-------------
Eleanor Roosevelt
-------------
Steve Martin

```

## <a></a>Técnicas avanzadas

Aquí hay algunas técnicas más avanzadas. En los ejemplos siguientes, utilizamos `find_all()`, pero estos métodos son igualmente compatibles cuando se utiliza `find()`. Solo recuerda: ¿quieres un único elemento o una lista de ellos?

### <a></a>Regex

Regex es una herramienta muy potente para la coincidencia de cadenas. En este ejemplo de código, lo combinamos con la `cadena` article para encontrar todos los elementos que contienen `einstein`, independientemente de si están en mayúsculas o minúsculas.

```none
import requests
import re
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

pattern = re.compile(r"einstein", re.IGNORECASE)

tags = soup.find_all(string=pattern)

print(f"Total de citas de Einstein: {len(tags)}")

```

Se han encontrado 3 citas en la página.

```none
Total de citas de Einstein: 3

```

### <a></a>Funciones personalizadas

Ahora, escribamos una función personalizada para devolver todas las citas reales de Einstein. En el ejemplo siguiente, ampliamos la expresión regular. Utilizamos el método `parent` para recorrer y encontrar la tarjeta que contiene la cita. A continuación, encontramos todos los spans. El primer `span` de la tarjeta contiene la cita real. Imprimimos su contenido en la consola.

```none
import requests
import re
from bs4 import BeautifulSoup

def find_einstein_quotes(http_response):
    soup = BeautifulSoup(http_response.text, "html.parser")

    #encontrar todas las etiquetas einstein
    pattern = re.compile(r"einstein", re.IGNORECASE)
    tags = soup.find_all(string=pattern)

    for tag in tags:
        #seguir a los padres hasta que tengamos la tarjeta de la cita
        full_card = tag.parent.parent.parent

        #encontrar los spans
        spans = full_card.find_all("span")

        #imprimir el primer span, que contiene la cita real
        print(spans[0].text)

if __name__ == "__main__":
    response = requests.get("https://quotes.toscrape.com")
    find_einstein_quotes(response)

```

Este es nuestro resultado.

```none
«El mundo tal y como lo hemos creado es un proceso de nuestro pensamiento. No se puede cambiar sin cambiar nuestra forma de pensar».
«Solo hay dos formas de vivir la vida. Una es como si nada fuera un milagro. La otra es como si todo fuera un milagro».
«Intenta no convertirte en un hombre de éxito. Más bien, conviértete en un hombre de valor».

```

## <a></a>Bonus: Buscar utilizando selectores CSS

El método `select` de BeautifulSoup funciona casi exactamente igual que `find_all()`, pero es un poco más flexible. Este método utiliza un selector CSS. Si puedes escribir un [selector](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics/Basic_selectors), puedes encontrarlo. En este código, volvemos a encontrar a todos nuestros autores utilizando varios atributos. Sin embargo, podemos pasarlos como un único selector.

```none
import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

authors = soup.select("small[class='author'][itemprop='author']")

for author in authors:
    print("-------------")
    print(author.text)

```

Este es el resultado.

```none
-------------
Albert Einstein
-------------
J.K. Rowling
-------------
Albert Einstein
-------------
Jane Austen
-------------
Marilyn Monroe
-------------
Albert Einstein
-------------
André Gide
-------------
Thomas A. Edison
-------------
Eleanor Roosevelt
-------------
Steve Martin

```

## <a></a>Conclusión

Ahora ya conoce prácticamente todos los aspectos de`find()`y`find_all()`en BeautifulSoup. No es necesario que domine todos estos métodos. La gran variedad de métodos de búsqueda le permite elegir el que más le convenga. Lo más importante es que puedes utilizarlos para extraer datos de cualquier página web. En producción, especialmente para obtener resultados rápidos y fiables con una alta tasa de éxito, es posible que desees considerar nuestros[Proxies residenciales](/proxy-types/residential-proxies)o incluso[nuestro Navegador de scraping](/products/scraping-browser), que tiene un sistema de gestión de proxies integrado y [capacidades de Resolución de CAPTCHA](/products/web-unlocker/captcha-solver).

Regístrese y comience hoy mismo su prueba gratuita para encontrar el producto perfecto para sus necesidades.



Contactar ventasPrueba gratuita![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 Tabla de Contenidos













 [ ](https://news.ycombinator.com/submitlink?t=find%28%29+y+find_all%28%29+en+BeautifulSoup%3A+Gu%C3%ADa+2026&u=https://brightdata.es/blog/datos-web/find-all-beautiful-soup) [ ](https://www.linkedin.com/shareArticle?mini=true&title=find%28%29+y+find_all%28%29+en+BeautifulSoup%3A+Gu%C3%ADa+2026&url=https://brightdata.es/blog/datos-web/find-all-beautiful-soup) [ ](http://www.reddit.com/submit?title=find%28%29+y+find_all%28%29+en+BeautifulSoup%3A+Gu%C3%ADa+2026&url=https://brightdata.es/blog/datos-web/find-all-beautiful-soup)







##  Usted también puede estar interesado en

 [ ![OpenHuman with Bright Data](https://media.brightdata.es/2026/09/OpenHuman-with-Bright-Data.png) ](https://brightdata.es/blog/ai/openhuman-with-bright-data "Acceso Web Listo para Producción en OpenHuman a Través de la CLI de Bright Data")

 [AI



 ![Antonello Zanini](https://media.brightdata.es/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Acceso Web Listo para Producción en OpenHuman a Través de la CLI de Bright Data

Integra la CLI de Bright Data con OpenHuman para habilitar acceso web listo para producción y recopilación de datos para agentes de IA.



 09-Sep-2026

 14 min de lectura

 ](https://brightdata.es/blog/ai/openhuman-with-bright-data)

 [ ![Multimodal Web Scraping with MiniMax](https://media.brightdata.es/2026/09/Multimodal-Web-Scraping-with-MiniMax.png) ](https://brightdata.es/blog/datos-web/multimodal-web-scraping-with-minimax "Scraping Web Multimodal con MiniMax")

 [Datos web



 ![Antonello Zanini](https://media.brightdata.es/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Scraping Web Multimodal con MiniMax

Combina Bright Data Web Unlocker con la visión de MiniMax M3 para extraer datos estructurados de imágenes y capturas de pantalla de páginas web.



 09-Sep-2026

 5 min de lectura

 ](https://brightdata.es/blog/datos-web/multimodal-web-scraping-with-minimax)

 [ ![The 10 Best CLI Tools for Codex in 2026](https://media.brightdata.es/2026/08/The-10-Best-CLI-Tools-for-Codex-in-2026.png) ](https://brightdata.es/blog/ai/best-cli-tools-for-codex "Las 10 mejores herramientas CLI para Codex en 2026 – Probadas y clasificadas")

 [AI



 ![Daniel Shashko](https://media.brightdata.es/2022/04/Daniel-Shashko-2-50x50.png)

Daniel Shashko

Web Data &amp; AI Expert





### Las 10 mejores herramientas CLI para Codex en 2026 – Probadas y clasificadas

Las 10 herramientas CLI que hacen a Codex más rápido y capaz, comenzando con la Bright Data CLI para acceso web real desde dentro del sandbox.



 06-Sep-2026

 24 min de lectura

 ](https://brightdata.es/blog/ai/best-cli-tools-for-codex)
