image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Rafael Pereira
Rafael Pereira14/02/2025 14:41
Compartilhe

Como Extrair Dados com Python: 5 Métodos Práticos do Básico ao Avançado

    Quer coletar dados de sites, APIs ou até mesmo PDFs para análise, mas não sabe por onde começar? Neste artigo, vou mostrar 5 métodos essenciais para extrair dados com Python, desde técnicas simples para iniciantes até estratégias avançadas. Incluindo códigos prontos, erros cometidos e dicas para evitar bloqueios. Vamos transformar dados brutos em insights valiosos!

    1. Por Que Python é Ideal para Extração de Dados?

    Python é a linguagem preferida para web scraping e integração com APIs graças a:

    • Bibliotecas especializadasrequestsBeautifulSoupSeleniumScrapy.
    • Flexibilidade: Funciona em cenários simples (extrair tabelas de um site) ou complexos (dados de sites com JavaScript dinâmico).
    • Comunidade ativa: Soluções prontas para desafios como CAPTCHAs ou bloqueios de IP.

    👉 Experiência: É possível usar Python para extrair dados de mais de 200 páginas de um site governamental em minutos, algo que manualmente levaria dias.

    2. Método 1: Extraindo Dados de Sites Estáticos com BeautifulSoup

    Quando usar: Sites simples, sem JavaScript pesado.

    Passo a Passo:

    import requests  
    from bs4 import BeautifulSoup  
    
    # 1. Buscar o HTML da página  
    url = 'https://exemplo.com/produtos'  
    response = requests.get(url)  
    html = response.text  
    
    # 2. Analisar o HTML  
    soup = BeautifulSoup(html, 'html.parser')  
    
    # 3. Extrair dados (ex: nomes e preços de produtos)  
    produtos = []  
    for item in soup.find_all('div', class_='produto'):  
      nome = item.find('h2').text.strip()  
      preco = item.find('span', class_='preco').text  
      produtos.append({'nome': nome, 'preco': preco})  
    
    print(produtos[:2])  # Exibe os primeiros resultados  
    

    Erro Comum: Esquecer de verificar se o site permite scraping (leia robots.txt). Ignorar isso pode te bloquear!

    3. Método 2: Trabalhando com APIs (e Como Não Ser Bloqueado)

    Quando usar: Dados estruturados de serviços como Twitter, Spotify ou Google Maps.

    Exemplo: Extrair Dados do GitHub API

    import requests  
    
    # 1. Definir endpoint e cabeçalhos  
    url = 'https://api.github.com/users/octocat/repos'  
    headers = {'Accept': 'application/vnd.github.v3+json'}  
    
    # 2. Fazer a requisição  
    response = requests.get(url, headers=headers)  
    dados = response.json()  
    
    # 3. Processar resultados  
    repositorios = []  
    for repo in dados:  
      repositorios.append({  
          'nome': repo['name'],  
          'estrelas': repo['stargazers_count'],  
          'linguagem': repo['language']  
      })  
    
    print(f"Repositórios da Octocat: {repositorios}")  
    

    Dicas:

    • Respeite os limites de requisições (use time.sleep() entre chamadas).
    • Use autenticação via tokens (ex: headers={'Authorization': 'Bearer SEU_TOKEN'})

    4. Método 3: Raspagem de Sites Dinâmicos com Selenium

    Quando usar: Sites que carregam dados via JavaScript (ex: e-commerces com "scroll infinito").

    from selenium import webdriver  
    from selenium.webdriver.common.by import By  
    
    # 1. Configurar o navegador (ex: Chrome)  
    driver = webdriver.Chrome()  
    driver.get('https://exemplo.com/produtos')  
    
    # 2. Esperar carregar conteúdo dinâmico (ex: rolar a página)  
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")  
    
    # 3. Extrair dados  
    produtos = driver.find_elements(By.CLASS_NAME, 'produto')  
    for produto in produtos:  
      nome = produto.find_element(By.TAG_NAME, 'h2').text  
      preco = produto.find_element(By.CLASS_NAME, 'preco').text  
      print(f'Nome: {nome}, Preço: {preco}')  
    
    driver.quit()  # Fechar navegador  
    

    Desafio Comum: Sites alteram classes HTML frequentemente.

    5. Método 4: Extraindo Dados de PDFs e Imagens

    Caso 1: PDFs com PyPDF2

    import PyPDF2  
    
    with open('relatorio.pdf', 'rb') as arquivo:  
      leitor = PyPDF2.PdfReader(arquivo)  
      texto = ''  
      for pagina in leitor.pages:  
          texto += pagina.extract_text()  
      print(texto[:500])  # Primeiros 500 caracteres  
    

    Caso 2: OCR em Imagens com pytesseract

    from PIL import Image  
    import pytesseract  
    
    imagem = Image.open('nota_fiscal.png')  
    texto = pytesseract.image_to_string(imagem, lang='por')  
    print(texto)  
    

    Atenção: A qualidade da extração depende da resolução da imagem e da fonte.

    6. Método 5: Automatizando Tarefas com Scrapy (Avançado)

    Quando usar: Projetos grandes com necessidade de pipeline (extração, limpeza, armazenamento).

    Exemplo: Criar um Spider para Notícias

    import scrapy  
    
    class NoticiasSpider(scrapy.Spider):  
      name = 'noticias'  
      start_urls = ['https://exemplo.com/noticias']  
    
      def parse(self, response):  
          for noticia in response.css('div.noticia'):  
              yield {  
                  'titulo': noticia.css('h2::text').get(),  
                  'data': noticia.css('.data::attr(datetime)').get(),  
                  'link': noticia.css('a::attr(href)').get()  
              }  
    
    # Executar no terminal: scrapy runspider meu_spider.py -o noticias.json  
    

    Vantagem: Scrapy lida automaticamente com paralelismo e armazenamento em JSON/CSV

    7. Desafios Comuns (e Como Evitá-los)

    • Bloqueio por IP: Use proxies rotativos (bibliotecas como requests-rotator) e respeite robots.txt.
    • CAPTCHAs: Serviços como Anti-Captcha ou 2Captcha resolvem automaticamente (custo envolvido).
    • Dados Dinâmicos: Combine Selenium com BeautifulSoup para eficiência.
    • Estrutura Inconsistente: Teste scripts regularmente e monitore falhas.

    Erro Grave: Extrair dados pessoais sem consentimento. Conheça a LGPD!

    Conclusão: Sua Vez de Extrair Dados como um Profissional

    Dominar a extração de dados com Python abre portas para análise competitiva, pesquisa acadêmica e automação de negócios. Das 5 técnicas que compartilhei, comece pelo BeautifulSoup e APIs, depois avance para Selenium e Scrapy.

    Chamada para Ação:

    Escolha um site ou API de seu interesse e pratique! Compartilhe seu projeto com a tag #PythonParaDados e mostre como você transforma dados brutos em informação valiosa.

    🔗 Referências Úteis

    Compartilhe
    Comentários (1)
    Diego Piovesan
    Diego Piovesan - 14/02/2025 16:47

    Olá, Rafael.

    Gostaria de parabenizá-lo pelo artigo.

    Respeitosamente.

    Diego Piovesan.