Se você acha que páginas da web são apenas imagens bonitas e textos, tenho uma novidade pra você: elas são como cebolas — com várias camadas e podem te fazer chorar (de alegria, claro!) quando você descobre quantos dados dá pra tirar delas. Hoje vamos explorar páginas HTML com a biblioteca BeautifulSoup. Pegue sua pá virtual — é hora de cavar!
1. Analisando documentos HTML
Páginas simples
Bora dar uma olhada em alguns documentos HTML simples pra entender do que eles são feitos e quais elementos podem ser relevantes para extração de dados.
Exemplo de uma página de notícia:
<html>
<head>
<title>Notícias</title>
</head>
<body>
<h1>Notícia principal do dia</h1>
<p>Hoje aconteceu algo importante!</p>
</body>
</html>
Neste exemplo, h1 contém o título da notícia e p — o texto principal.
Impacto da estrutura HTML no scraping
Antes de usar o BeautifulSoup, é importante entender como o documento HTML que você quer analisar está estruturado. Isso ajuda a identificar as partes da página que contêm os dados necessários. Por exemplo, se você está procurando o título da página, fique de olho no <h1>, e para extrair uma lista use <ul> e <li>.
Preparação para o scraping
Antes de começar a extração, é importante identificar as tags e atributos-chave. Por exemplo, se os desenvolvedores da página marcaram os dados com atributos, como class="headline" para um título, isso vai te ajudar muito. Use as ferramentas de desenvolvedor do navegador pra examinar a estrutura do HTML. Clique com o botão direito em um elemento e escolha "Inspecionar" (no Google Chrome).
2. Instalando e configurando bibliotecas
Instalação do BeautifulSoup e requests
Para trabalhar com HTML vamos usar a biblioteca BeautifulSoup. Também, pra carregar as páginas HTML, vamos precisar do requests. A instalação é bem simples e requer apenas alguns comandos no terminal:
pip install beautifulsoup4 requests
Requests e BeautifulSoup juntos
Requests vai ajudar a puxar o HTML da página web, enquanto BeautifulSoup vai fazer o parsing. Dá uma olhada em como isso funciona na prática:
import requests
from bs4 import BeautifulSoup
# Carregar a página
url = 'https://example.com'
response = requests.get(url)
# Parsear o HTML com BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
# Extraindo o título da página
title = soup.title.text
print('Título:', title)
3. Navegação e extração de dados por tags
Métodos de navegação
Agora que temos o documento HTML, podemos usar o BeautifulSoup pra navegar nele. O método .select() é incrível pra extrair dados usando seletores CSS.
Extração de dados por tags
O BeautifulSoup oferece métodos pra encontrar elementos pelas tags, como find e find_all. Eles vão te ajudar a pegar aqueles dados preciosos:
# Encontrar o primeiro parágrafo
paragraph = soup.find('p').text
print('Primeiro parágrafo:', paragraph)
# Encontrar todos os itens de lista
list_items = soup.find_all('li')
for item in list_items:
print('Item da lista:', item.text)
Usando atributos para filtrar
Às vezes você vai precisar extrair elementos que atendam a determinadas condições, como ter uma class específica. O BeautifulSoup facilita isso:
# Extração de elementos com uma classe específica
headline = soup.find('h1', class_='main-headline').text
print('Título:', headline)
4. Usando seletores CSS
O que são seletores CSS?
Seletores CSS — uma ferramenta poderosa pra programadores Python, que permite extrair dados com base em critérios específicos. Eles podem ser usados pra encontrar elementos que compartilham estilos, tornando o scraping mais flexível e preciso.
Usando seletores no BeautifulSoup
O BeautifulSoup permite usar seletores CSS através do método select. Por exemplo:
# Selecionar todos os links
links = soup.select('a')
for link in links:
print('Link:', link['href'])
Você também pode combinar seletores pra fazer uma busca mais precisa. Por exemplo, soup.select('div.article h2') seleciona todos os h2 dentro de um div com a classe article.
Exemplos de busca com seletores CSS
Vamos aplicar o que aprendemos. Encontre todos os parágrafos com a classe highlight e exiba o texto deles:
# Extração de todos os parágrafos com a classe 'highlight'
highlighted_paragraphs = soup.select('p.highlight')
for para in highlighted_paragraphs:
print('Parágrafo destacado:', para.text)
Por hoje é isso, não deixe de praticar suas habilidades de scraping até o nosso próximo encontro. Boa sorte no fascinante mundo do parsing!
GO TO FULL VERSION