Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

Web Scraping com Python: Coleta Inteligente de Dados com BeautifulSoup, Selenium e Scrapy

Web Scraping com Python: Coleta Inteligente de Dados com BeautifulSoup, Selenium e Scrapy

O que é Web Scraping e Por Que Utilizar?

Web scraping é a técnica de extrair dados de sites de forma automatizada. Em um mundo onde dados são o novo petróleo, saber coletá-los da web de maneira estruturada é uma habilidade essencial para cientistas de dados, desenvolvedores e profissionais de marketing digital.

Com Python, o ecossistema de bibliotecas para scraping é maduro e flexível, oferecendo soluções desde páginas HTML estáticas até aplicações JavaScript单 página (SPA) pesadas.

Principais Ferramentas do Ecossistema Python

Três bibliotecas dominam o cenário de web scraping em Python. Cada uma tem seu caso de uso ideal:

  • BeautifulSoup: Ideal para páginas HTML estáticas e bem estruturadas. Leve, rápido e excelente para navegação na árvore DOM.
  • Selenium: Necessário quando o site carrega conteúdo dinamicamente com JavaScript. Automatiza um navegador real (Chrome, Firefox, Edge).
  • Scrapy: Framework completo para scraping em escala. Suporta requisições assíncronas, pipelines de dados, middlewares e exportação integrada.

BeautifulSoup na Prática

BeautifulSoup transforma o HTML de uma página em uma árvore de objetos Python que pode ser navegada de forma intuitiva. Veja um exemplo prático:

import requests
from bs4 import BeautifulSoup

url = 'https://exemplo.com/artigos'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# Extraindo títulos de artigos
artigos = soup.find_all('article')
for artigo in artigos:
    titulo = artigo.find('h2').get_text(strip=True)
    link = artigo.find('a')['href']
    print(f'{titulo}: {link}')

O método find_all() retorna todas as tags que correspondem ao filtro, enquanto find() retorna apenas a primeira ocorrência. Você pode buscar por tags, classes CSS, atributos ou combinações deles.

Selenium: Quando o JavaScript é o Obstáculo

Muitos sites modernos carregam conteúdo via JavaScript após a renderização inicial. Nesses casos, o BeautifulSoup não consegue acessar o conteúdo, pois ele só vê o HTML bruto recebido pelo servidor. O Selenium soluciona isso ao controlar um navegador real:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://exemplo.com/dashboard')

# Aguarda o elemento carregar dinamicamente
elemento = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'dados-tabela'))
)

dados = elemento.text
print(dados)
driver.quit()

O Selenium permite também interagir com a página: clicar em botões, preencher formulários, fazer scroll e capturar screenshots — tudo como um usuário real faria.

Scrapy: Scraping em Produção e em Escala

Quando você precisa raspar milhares de páginas de forma eficiente, o Scrapy é a escolha certa. Ele é um framework completo que lida com requisições assíncronas, filas de URLs, e exportação de dados:

import scrapy

class BlogSpider(scrapy.Spider):
    name = 'blog_spider'
    start_urls = ['https://blog.exemplo.com']

    def parse(self, response):
        for post in response.css('div.post'):
            yield {
                'titulo': post.css('h2::text').get(),
                'data': post.css('span.date::text').get(),
                'url': post.css('a::attr(href)').get(),
            }
        
        # Segue paginação
        next_page = response.css('a.next::attr(href)').get()
        if next_page:
            yield response.follow(next_page, self.parse)

Para executar o spider, use o comando:

scrapy runspider blog_spider.py -o artigos.json

O Scrapy gerencia automaticamente limites de requisição, politeness (respeito ao robots.txt), e rotação de User-Agent através de configurações simples no arquivo settings.py.

Boas Práticas e Cuidados Legais

Antes de iniciar qualquer projeto de scraping, considere estes pontos fundamentais:

  1. Respeite o robots.txt: Verifique as regras do site em /robots.txt. Algumas seções podem ser explicitamente proibidas para crawlers.
  2. Rate Limiting: Adicione delays entre requisições (time.sleep(1) ou DOWNLOAD_DELAY no Scrapy) para não sobrecarregar o servidor.
  3. Termos de Serviço: Leia os Termos de Serviço do site. Alguns proíbem explicitamente scraping automatizado.
  4. User-Agent: Identifique-se adequadamente com um User-Agent realista. Nunca se passe por outro serviço.
  5. Cache: Armazene respostas em cache para evitar requisições repetidas durante o desenvolvimento.

Tratamento de Erros e Resiliência

Web scraping raramente funciona perfeitamente na primeira tentativa. Sites mudam de layout, conexões falham, e elementos podem não estar disponíveis. Um scraping robusto precisa de tratamento de erros:

import time
from requests.exceptions import RequestException

def fetch_with_retry(url, tentativas=3):
    for tentativa in range(tentativas):
        try:
            response = requests.get(url, timeout=10)
            response.raise_for_status()
            return response
        except RequestException as e:
            print(f'Tentativa {tentativa + 1} falhou: {e}')
            if tentativa < tentativas - 1:
                time.sleep(2 ** tentativa)  # Backoff exponencial
    return None

Exportando Dados para Análise

Depois de coletar os dados, você pode exportá-los nos formatos mais comuns para análise:

import pandas as pd

# Lista de dicionários com dados extraídos
dados = [
    {'titulo': 'Artigo 1', 'autor': 'João', 'visualizacoes': 1500},
    {'titulo': 'Artigo 2', 'autor': 'Maria', 'visualizacoes': 2300},
]

df = pd.DataFrame(dados)
df.to_csv('artigos.csv', index=False)
df.to_json('artigos.json', orient='records', indent=2)

O Pandas permite transformar rapidamente os dados coletados em estruturas prontas para visualização, análise estatística ou alimentação de modelos de machine learning.

Conclusão

Web scraping com Python é uma habilidade poderosa que abre portas para coleta e análise de dados em escala. A combinação de BeautifulSoup (para páginas simples), Selenium (para conteúdo dinâmico) e Scrapy (para produção) cobre praticamente qualquer cenário que você encontrará. Lembre-se sempre de scraping de forma ética e legal, respeitando os recursos do servidor e os direitos de uso dos dados.

Com as técnicas apresentadas neste artigo, você está pronto para transformar páginas web em datasets valiosos para seus projetos de dados, automação e pesquisa.

Craft XP
Craft XP