Parsing HTML em Swift (iOS/macOS): bibliotecas SwiftSoup e Fuzi

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Parsing HTML em Swift (iOS/macOS): visão geral das bibliotecas SwiftSoup e Fuzi



Ao desenvolver aplicativos para iOS e macOS, muitas vezes surge a necessidade de extrair dados de páginas web. O parsing de HTML permite obter conteúdo automaticamente, estruturá-lo e utilizá-lo no aplicativo. No ecossistema Swift, existem várias bibliotecas poderosas para esse fim. Neste artigo, vamos analisar detalhadamente as duas mais populares: SwiftSoup e Fuzi. Você aprenderá como instalá-las, como realizar operações básicas de parsing e quais são as características de cada uma.



Por que o parsing de HTML em Swift é necessário?

O parsing de HTML é útil nos seguintes cenários:

  • Agregação de dados — coleta de notícias, preços, descrições de produtos de vários sites.
  • Monitoramento de alterações — acompanhamento de atualizações em páginas alvo.
  • Integração com serviços web — se o site não fornece API, o parsing é a única maneira de obter dados.
  • Automação de testes — verificação da correção da estrutura HTML.


Biblioteca SwiftSoup

SwiftSoup é uma versão em Swift da popular biblioteca Java Jsoup. Ela fornece uma API conveniente para parsing, navegação e manipulação de documentos HTML. O SwiftSoup suporta seletores CSS, tornando a extração de elementos simples e intuitiva.



Instalação do SwiftSoup

Adicione a dependência no seu Package.swift ou através do Swift Package Manager no Xcode:

// Package.swiftdependencies: [    .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.6.0")]


Exemplo de uso do SwiftSoup

Vamos considerar um exemplo simples: carregar uma string HTML e extrair títulos <h2> e links <a>.

import SwiftSoup

func parseHTML() { let html = """ <html> <body> <h2>Título do artigo</h2> <p>Texto do parágrafo.</p> <a href="https://example.com">Link</a> </body> </html> """ do { let doc = try SwiftSoup.parse(html) // Extrair todos os títulos h2 let headers = try doc.select("h2") for header in headers { print("Título: \\(try header.text())") } // Extrair todos os links let links = try doc.select("a[href]") for link in links { let linkText = try link.text() let linkHref = try link.attr("href") print("Texto: \\(linkText), URL: \\(linkHref)") } } catch { print("Erro de parsing: \\(error)") }}

Neste exemplo, usamos o método select() com o seletor CSS "h2" para selecionar todos os títulos de segundo nível, e "a[href]" — para selecionar todos os links com o atributo href. O método text() retorna o conteúdo textual do elemento, e attr() retorna o valor do atributo especificado.



Navegação pela árvore do documento

O SwiftSoup permite navegar pela árvore DOM:

// Obter o primeiro elemento h2if let firstHeader = try doc.select("h2").first() {    print("Primeiro título: \\(try firstHeader.text())")}

// Obter o elemento pailet parent = try firstHeader.parent()print("Pai: \\(try parent?.tagName() ?? "nil")")

// Obter o próximo elemento irmãolet nextSibling = try firstHeader.nextElementSibling()print("Próximo elemento: \\(try nextSibling?.tagName() ?? "nil")")


Biblioteca Fuzi

Fuzi é outra biblioteca popular para parsing de HTML e XML em Swift. Ela é baseada em libxml2 e se destaca pelo alto desempenho. O Fuzi também suporta seletores CSS e consultas XPath.

Recommendations