0Pricing
Python Academy · Aula

Análise de HTML com BeautifulSoup

Navegue pela árvore sintática e extraia dados com seletores.

Análise de HTML com BeautifulSoup é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

Instalando BeautifulSoup

beautifulsoup4 analisa HTML e XML. Use o analisador lxml para obter velocidade ou html.parser para uma utilização sem dependências adicionais.

# pip install beautifulsoup4 lxml
from bs4 import BeautifulSoup

html = "<h1>Hello</h1><p class='intro'>World</p>"
soup = BeautifulSoup(html, "lxml")
print(soup.h1.text)   # Hello

Encontrando elementos

find(tag) retorna o primeiro elemento correspondente. find_all(tag) retorna uma lista de todos os elementos correspondentes.

from bs4 import BeautifulSoup

html = "<ul><li>A</li><li>B</li><li>C</li></ul>"
soup = BeautifulSoup(html, "lxml")
print(soup.find("li").text)       # A
print([li.text for li in soup.find_all("li")])  # [A,B,C]

Seletores CSS

soup.select("css selector") usa a sintaxe CSS. soup.select_one() retorna a primeira correspondência.

from bs4 import BeautifulSoup

html = '<div class="card"><a href="/p/1">Link 1</a></div>'
soup = BeautifulSoup(html, "lxml")
print(soup.select("div.card a")[0]["href"])   # /p/1
print(soup.select_one("a")["href"])          # /p/1

Acessando atributos

Acesse os atributos de um elemento como em um dicionário: tag["href"], tag.get("class", []).

from bs4 import BeautifulSoup

html = '<a href="https://example.com" class="link external">Click</a>'
soup = BeautifulSoup(html, "lxml")
a = soup.find("a")
print(a["href"])           # https://example.com
print(a.get("class", [])) # ['link', 'external']

Navegando pela árvore de análise

Use .parent, .children, .next_sibling, .previous_sibling para percorrer a árvore.

from bs4 import BeautifulSoup

html = "<div><h2>Title</h2><p>Para</p></div>"
soup = BeautifulSoup(html, "lxml")
h2 = soup.find("h2")
print(h2.parent.name)         # div
print(h2.next_sibling.text)   # Para (next sibling)

Extraindo texto

tag.get_text(separator=" ", strip=True) retorna todo o texto dentro de um elemento, com os espaços em branco ajustados.

from bs4 import BeautifulSoup

html = "<div>  <p>Hello</p>  <p> World </p>  </div>"
soup = BeautifulSoup(html, "lxml")
print(soup.div.get_text(separator=" ", strip=True))
# Hello World

Extraindo dados com requests + BeautifulSoup

Busque uma página com requests e analise-a com BeautifulSoup — a combinação clássica para extração de dados.

import requests
from bs4 import BeautifulSoup

url = "https://books.toscrape.com"
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.text, "lxml")

titles = [h3.find("a")["title"] for h3 in soup.select("article.product_pod h3")]
print(titles[:3])

Lidando com URLs relativas

Use urllib.parse.urljoin(base, href) para converter links relativos em URLs absolutas.

from urllib.parse import urljoin
base = "https://example.com/products/"
href = "../about"
print(urljoin(base, href))   # https://example.com/about

Lidando com codificações

BeautifulSoup detecta a codificação automaticamente, mas é possível especificá-la ou usar r.encoding do requests.

import requests
from bs4 import BeautifulSoup

r = requests.get("https://example.com")
print(r.encoding)   # e.g. utf-8
soup = BeautifulSoup(r.content, "lxml", from_encoding=r.encoding)

Modificando e serializando

Modifique a árvore de análise e converta-a novamente para HTML com str(tag) ou soup.prettify().

from bs4 import BeautifulSoup

html = "<p>Hello <b>world</b></p>"
soup = BeautifulSoup(html, "lxml")
soup.b.decompose()   # remove the <b> tag
print(str(soup.p))   # <p>Hello </p>

Limitações do BeautifulSoup

O BS4 analisa HTML estático. Ele não consegue executar JavaScript. Para páginas renderizadas por JS, use Playwright ou Selenium.

# BeautifulSoup: good for static HTML
# Playwright: for JavaScript-rendered SPAs
# Scrapy: for large-scale crawls with pipelines

# pip install playwright
# playwright install
# from playwright.async_api import async_playwright

Verificação rápida

Qual método retorna todos os elementos correspondentes a um seletor CSS no BeautifulSoup?

Revisão

BeautifulSoup analisa HTML em uma árvore navegável. Use find()/find_all() para pesquisar elementos, select() para seletores CSS e get_text() para obter texto limpo. Combine-o com requests para páginas estáticas; use Playwright para conteúdo renderizado por JS.

Perguntas Frequentes

A aula “Análise de HTML com BeautifulSoup” é grátis?

Sim — o texto completo de “Análise de HTML com BeautifulSoup” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “Análise de HTML com BeautifulSoup”?

Navegue pela árvore sintática e extraia dados com seletores. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Análise de HTML com BeautifulSoup”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Requisições HTTP com requests e httpx
  2. Análise de HTML com BeautifulSoup
  3. Criação de um spider com Scrapy
  4. Tratamento de JavaScript e medidas antirraspagem
← Voltar para Python Academy