find() e find_all() no BeautifulSoup: Guia 2026

Aprenda a usar os métodos find() e find_all() do BeautifulSoup para extrair dados da web de forma eficiente por classe, ID, texto e atributos em Python.
12 min de leitura
How To Use BeautifulSoup’s find and find_all blog image

find() e find_all() são métodos essenciais para Scraping de dados com BeautifulSoup, ajudando você a extrair dados de HTML. O método find() recupera o primeiro elemento que corresponde aos seus critérios, como find("div") para obter o primeiro div em uma página, retornando None se nenhuma correspondência for encontrada. Enquanto isso, find_all() encontra todos os elementos correspondentes e os retorna como uma lista, tornando-o perfeito para extrair vários elementos, como todas as tags div. Antes de iniciar sua jornada de Scraping de dados com o BeautifulSoup, certifique-se de ter o Requests e o BeautifulSoup instalados.

Instale as dependências

pip install requests
pip install beautifulsoup4

find()

Vamos nos familiarizar com find(). Nos exemplos abaixo, usaremos Quotes To Scrape e Fake Store API para encontrar elementos na página. Ambos os sites foram criados para scraping. Eles não mudam muito, então são perfeitos para aprender.

Localizar por classe

Para encontrar um elemento usando sua classe, usamos a palavra-chave class_. Você pode se perguntar por que class_ e não class? Em Python, class é uma palavra-chave usada para criar tipos de dados personalizados. O sublinhado em class_ evita que essa palavra-chave cause conflitos com nosso código.

O exemplo abaixo encontra o primeiro div com a classe: quote.

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)

Aqui está o nosso resultado.

“O mundo como o criamos é um processo do nosso pensamento. Ele não pode ser mudado sem mudar nosso pensamento.”
por Albert Einstein
(sobre)


Tags:

mudança
pensamentos profundos
pensamento
mundo

Encontrar por ID

Ao fazer scraping, você também precisará procurar elementos usando sua identificação. No exemplo abaixo, usamos o argumento id para encontrar o menu na página. Aqui, encontramos o menu na página usando sua identificação.

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)

Aqui está o menu depois de extraído e impresso no terminal.

Página inicial
Documentação
GitHub
Compre-me um café

Pesquisar por texto

Também podemos pesquisar itens usando seu texto. Para fazer isso, usamos o argumento string. O exemplo abaixo encontra o botão Login na página.

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 você pode ver, Login é impresso no console.

Login

Encontrar por atributo

Também podemos usar diferentes atributos para uma pesquisa mais precisa. Desta vez, encontramos novamente a primeira citação da página. No entanto, procuramos um span com o itemprop do texto. Isso encontra novamente nossa primeira citação, mas sem todas as informações extras, como autor e tags.

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"})

imprimir(primeira_citação_limpa.texto)

Aqui está a versão limpa da nossa primeira citação.

“O mundo como o criamos é um processo do nosso pensamento. Ele não pode ser mudado sem mudar nosso pensamento.”

Encontrar usando vários critérios

Como você deve ter notado anteriormente, o argumento attr aceita um dicionário em vez de um único valor. Isso nos permite passar vários critérios para uma filtragem ainda melhor. Aqui, encontramos o primeiro autor na página usando os atributos class e itemprop.

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"})
imprimir(primeiro_autor.texto)

Ao executar isso, você deve obter Albert Einstein como resultado.

Albert Einstein

find_all()

Agora, vamos examinar esses mesmos exemplos usando find_all(). Mais uma vez, usaremos Quotes to Scrape e a API Fake Store. Esses exemplos são quase idênticos, mas com uma diferença importante. find() retorna um único elemento. find_all() retorna uma lista de elementos da página.

Localizar por classe

Para encontrar elementos usando sua classe, usamos o argumento de palavra-chave class_. O código abaixo usa find_all() para extrair cada citação usando sua classe CSS.

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)

Quando extraímos e imprimimos a primeira página de citações, ela fica assim.

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

“O mundo como o criamos é um processo do nosso pensamento. Ele não pode ser mudado sem mudar nosso pensamento.”
por Albert Einstein
(sobre)


Tags:

mudança
pensamentos profundos
pensamento
mundo


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

“São nossas escolhas, Harry, que mostram quem realmente somos, muito mais do que nossas habilidades.”
por J.K. Rowling
(sobre)


            Tags:
            
habilidades
escolhas


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

“Existem apenas duas maneiras de viver sua vida. Uma é como se nada fosse um milagre. A outra é como se tudo fosse um milagre.”
por Albert Einstein
(sobre)


Tags:

inspirador
vida
viver
milagre
milagres


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

“A pessoa, seja homem ou mulher, que não tem prazer em um bom romance, deve ser intoleravelmente estúpida.”
por Jane Austen
(sobre)


            Tags:

analfabetismo
livros
clássico
humor


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

“A imperfeição é beleza, a loucura é genialidade e é melhor ser absolutamente ridículo do que absolutamente chato.”
por Marilyn Monroe
(sobre)


            Tags:

seja-você-mesmo
inspirador


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

“Tente não se tornar um homem de sucesso. Em vez disso, torne-se um homem de valor.”
por Albert Einstein
(sobre)


Tags:

idade adulta
sucesso
valor


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

“É melhor ser odiado pelo que você é do que ser amado pelo que você não é.”
por André Gide
(sobre)


Tags:
            
vida
amor


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

“Eu não falhei. Apenas descobri 10.000 maneiras que não funcionam.”
por Thomas A. Edison
(sobre)


            Tags:

edison
fracasso
inspirador
parafraseado


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

“Uma mulher é como um saquinho de chá; você nunca sabe o quão forte ele é até colocá-lo na água quente.”
por Eleanor Roosevelt
(sobre)


            Tags:

atribuída erroneamente a Eleanor Roosevelt


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

“Um dia sem sol é como, você sabe, a noite.”
por Steve Martin
(sobre)


Tags:

humor
óbvio
comparação

Encontrar por ID

Como falamos ao usar find(), id é outro dos métodos mais comuns que você pode usar para extrair dados da página. Para extrair dados usando seu id, usamos o argumento id… assim como fizemos anteriormente.

Em seguida, encontramos todos os itens ul com um id de menu. Há apenas um menu, então, na verdade, encontraremos apenas um.

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("-------------")
    imprimir(ul.text)

Como há apenas um menu na página, nossa saída é exatamente a mesma que quando usamos find().

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

Página inicial
Documentação
GitHub
Compre-me um café

Localizar por texto

Agora, vamos extrair itens de uma página usando seu texto. Usaremos o argumento string. No exemplo abaixo, encontramos todos os elementos a que contêm a string: Login. Mais uma vez, há apenas um.

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")

para botão em botões_de_login:
    imprimir("-------------")
    imprimir(botão)

Sua saída deve ficar assim.

-------------
<a href="/login">Login</a>

Encontrar por atributo

Quando você passar para a extração em ambientes reais, muitas vezes precisará usar outros atributos para extrair itens da página. Lembra-se de como a saída do primeiro exemplo ficou confusa? No próximo trecho, usaremos o atributo itemprop e, desta vez, extrairemos apenas as citações.

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)

Veja como nossa saída está limpa!

-------------
“O mundo que criamos é um processo do nosso pensamento. Ele não pode ser mudado sem mudar nosso pensamento.”
-------------
“São nossas escolhas, Harry, que mostram quem realmente somos, muito mais do que nossas habilidades.”
-------------
“Existem apenas duas maneiras de viver sua vida. Uma é como se nada fosse um milagre. A outra é como se tudo fosse um milagre.”
-------------
“A pessoa, seja ela um cavalheiro ou uma dama, que não tem prazer em um bom romance, deve ser intoleravelmente estúpida.”
-------------
“A imperfeição é beleza, a loucura é genialidade e é melhor ser absolutamente ridículo do que absolutamente chato.”
-------------
“Tente não se tornar um homem de sucesso. Em vez disso, torne-se um homem de valor.”
-------------
“É melhor ser odiado pelo que você é do que ser amado pelo que você não é.”
-------------
“Eu não falhei. Apenas descobri 10.000 maneiras que não funcionam.”
-------------
“Uma mulher é como um saquinho de chá; você nunca sabe o quão forte ele é até colocá-lo na água quente.”
-------------
“Um dia sem sol é como, você sabe, a noite.”

Encontrar usando vários critérios

Desta vez, usaremos o argumento attrs de uma forma mais complexa. Aqui, encontramos todos os pequenos elementos que têm uma classe de autor e um itemprop de autor. Fazemos isso passando ambos os atributos para o nosso dicionário attrs.

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)

Aqui está nossa lista de autores no console.

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

Técnicas avançadas

Aqui estão algumas técnicas mais avançadas. Nos exemplos abaixo, usamos find_all(), mas esses métodos são igualmente compatíveis quando usamos find(). Lembre-se: você quer um único elemento ou uma lista deles?

Regex

Regex é uma ferramenta muito poderosa para correspondência de strings. Neste exemplo de código, combinamos com a string article para encontrar todos os elementos que contêm einstein, independentemente de suas letras maiúsculas ou minúsculas.

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)

imprimir(f"Total de citações de Einstein: {len(tags)}")

Foram encontradas 3 citações na página.

Total de citações de Einstein: 3

Funções personalizadas

Agora, vamos escrever uma função personalizada para retornar todas as citações reais de Einstein. No exemplo abaixo, expandimos a expressão regular. Usamos o método pai para percorrer e encontrar o cartão que contém a citação. Em seguida, encontramos todos os spans. O primeiro span no cartão contém a citação real. Imprimimos seu conteúdo no console.

import requests
import re
from bs4 import BeautifulSoup

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

    #encontrar todas as tags einstein
    pattern = re.compile(r"einstein", re.IGNORECASE)
    tags = soup.find_all(string=padrão)

    para tag em tags:
        #siga os pais até encontrarmos o cartão da citação
        cartão_completo = tag.parent.parent.parent

        #encontre os spans
        spans = cartão_completo.find_all("span")

        #imprima o primeiro span, ele contém a citação real
        imprimir(spans[0].text)


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

Aqui está o nosso resultado.

“O mundo que criamos é um processo do nosso pensamento. Ele não pode ser mudado sem mudar nosso pensamento.”
“Existem apenas duas maneiras de viver sua vida. Uma é como se nada fosse um milagre. A outra é como se tudo fosse um milagre.”
“Tente não se tornar um homem de sucesso. Em vez disso, torne-se um homem de valor.”

Bônus: Encontre usando seletores CSS

O método select do BeautifulSoup funciona quase exatamente como find_all(), mas é um pouco mais flexível. Esse método aceita um seletor CSS. Se você consegue escrever um seletor, você consegue encontrar. Neste código, encontramos todos os nossos autores usando vários atributos novamente. No entanto, podemos passá-los como um único seletor.

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']")

para autor em autores:
    imprimir("-------------")
    imprimir(autor.text)

Aqui está o nosso resultado.

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

Conclusão

Agora você conhece praticamente todos os aspectos dofind()edo find_all()no BeautifulSoup. Você não precisa dominar todos esses métodos. A grande variedade de métodos de localização permite que você escolha aquele com o qual se sente mais confortável. Mais importante ainda, você pode usá-los para extrair dados de qualquer página da web. Na produção, especialmente para resultados rápidos e confiáveis com uma alta taxa de sucesso, você pode considerar nossosProxies residenciaisou até mesmoo Navegador de scraping, que possui um sistema de gerenciamento de Proxy integrado e recursos de Resolução de CAPTCHA.

Inscreva-se e comece hoje mesmo seu teste grátis para encontrar o produto perfeito para suas necessidades.