CodeGym /Curso Java /Python SELF PT /Como buscar elementos com os métodos find e find_all para...

Como buscar elementos com os métodos find e find_all para raspagem direcionada

Python SELF PT
Nível 32 , Lição 1
Disponível

1. Por que usar find e find_all?

Hoje vamos falar sobre dois métodos principais que vão te ajudar a extrair elementos de documentos HTML de forma eficiente e direcionada: find e find_all.

Antes de mergulharmos no código, vamos discutir por que esses métodos são tão importantes. Imagine uma página da web como uma enorme biblioteca, onde cada palavra e frase são elementos HTML. Parece que encontrar a informação correta seria como tentar adivinhar o sabor de um sorvete sem saber sua cor. Os métodos find e find_all são como “detectores de sabor” que te ajudam a se concentrar exatamente nas informações que precisa.

  • find: Esse método é como o hábito de um programador buscar a primeira xícara de café da manhã – encontra rapidamente e retorna o primeiro elemento que atende aos critérios especificados.
  • find_all: Esse é um método mais paciente e minucioso, que retorna uma lista de todos os elementos que atendem aos critérios de busca. Ideal para situações onde você precisa de mais informações (tipo várias xícaras de café durante o dia).

2. Usando o find

O método find é útil quando você quer extrair rapidamente o primeiro elemento correspondente. Ele aceita vários parâmetros, como o nome da tag, atributos e até mesmo funções.

Assinatura do método find


find(name=None, attrs={}, recursive=True, string=None, **kwargs)

Parâmetros do método find

  • name: O nome da tag que você deseja encontrar. Pode ser qualquer tag HTML, como div, p, h1, a, etc.
  • attrs: Um dicionário de atributos da tag. Por exemplo, {'class': 'exemplo'} ou {'id': 'principal'}. Esse parâmetro ajuda a refinar a busca.
  • recursive: Um parâmetro booleano que especifica se o método deve procurar a tag em todos os níveis de aninhamento. O padrão é True, o que significa que a busca será feita em todos os níveis.
  • string: Busca elementos com texto específico. Útil para filtrar elementos pelo conteúdo textual.
  • kwargs: Argumentos adicionais para busca por atributos. Por exemplo, argumentos como class_ serão interpretados como attrs={'class': 'valor'}.

Exemplo

Python

from bs4 import BeautifulSoup

html_doc = """
<html>
    <head><title>A história do Dormouse</title></head>
    <body>
        <p class="title"><b>A história do Dormouse</b></p>
        <p class="story">Era uma vez três irmãs; e seus nomes eram
        <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
        <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> e
        <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
        e elas viviam no fundo de um poço.</p>
    </body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
first_link = soup.find('a')  # Encontra a primeira <a> tag

print(first_link)  # Retorna: <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>

Como você pode ver, o método find encontrou a primeira tag <a> no documento, e podemos continuar com nossas buscas, sabendo que a informação necessária foi encontrada.

3. Usando o find_all

O método find_all retorna uma lista de todos os elementos que atendem aos critérios especificados. Isso é especialmente útil quando você precisa obter todas as tags de um tipo específico ou todos os elementos com uma determinada classe.

Assinatura do método find_all


find_all(name=None, attrs={}, recursive=True, string=None, limit=None, **kwargs)

Parâmetros do método find_all

  • name: O nome da tag que você deseja encontrar. Pode ser o nome da tag (como div, a, p, etc.) ou uma lista de nomes de tags, como ["div", "p"].
  • attrs: Um dicionário de atributos para filtrar as tags, como {'class': 'exemplo'}.
  • recursive: Especifica se a busca será feita recursivamente, incluindo tags aninhadas. O padrão é True.
  • string: Busca tags que contenham o texto especificado.
  • limit: Define o número máximo de resultados retornados. Se especificado, o método retornará no máximo limit elementos.
  • kwargs: Parâmetros adicionais para filtrar os atributos das tags.

Exemplo de uso do find_all

Se o find é como uma busca rápida pelo livro certo na estante, o find_all é uma abordagem mais detalhada, como reler cada título de sessão para entender.

Python

all_links = soup.find_all('a')  # Encontra todas as tags <a>

for link in all_links:
    print(link.get('href'))  # Retorna: http://example.com/elsie, http://example.com/lacie, http://example.com/tillie

Neste exemplo, encontramos todas as tags <a> e extraímos os links de cada uma delas. Útil quando você precisa coletar todos os links de uma página.

Importante! Os métodos find() e find_all() podem ser chamados não apenas no objeto soup, mas em qualquer elemento filho que tenha sido retornado por funções como find(), select(), etc.

4. Usando atributos para filtrar elementos

Agora que controlamos nossa sede por dados, é hora de sermos mais específicos. Os métodos find e find_all permitem filtrar elementos por atributos. Isso é como ajustar o filtro na máquina de café para obter exatamente a bebida que você deseja.

Python

link_with_id = soup.find('a', id='link2')  # Encontra <a> com id='link2'

print(link_with_id.text)  # Retorna: Lacie

Usando o parâmetro id, encontramos rapidamente o elemento desejado. Da mesma forma, é possível usar outros atributos, como class.

Python

links_with_class = soup.find_all('a', class_='sister')  # Encontra todas as <a> com class='sister'

for link in links_with_class:
    print(link.get('id'))  # Retorna: link1, link2, link3
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION