Parsing de HTML em Rust: bibliotecas, ferramentas e exemplos de código

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 de HTML em Rust: visão geral das bibliotecas e exemplos práticos



Rust — uma linguagem de programação de sistemas que está ganhando popularidade em tarefas de web scraping e parsing de HTML devido ao seu desempenho, segurança de memória e tipagem forte. Neste artigo, vamos explorar as principais bibliotecas para parsing de HTML em Rust, suas funcionalidades e fornecer exemplos de código para cada uma delas.



1. Biblioteca scraper



scraper — uma das bibliotecas mais populares e convenientes para parsing de HTML em Rust. Ela é construída sobre o html5ever (parser HTML5) e fornece uma API de alto nível para navegação na árvore DOM usando seletores CSS.



Instalação

[dependencies]scraper = "0.19"


Exemplo: obtendo títulos de artigos

use scraper::{Html, Selector};

fn main() { let html = r#" <html> <body> <h1 class="title">Primeiro artigo</h1> <h1 class="title">Segundo artigo</h1> </body> </html> "#;

let document = Html::parse_document(html); let selector = Selector::parse("h1.title").unwrap();

for element in document.select(&selector) { println!("{}", element.text().collect::<Vec<_>>().join(" ")); }}


Vantagens:

  • API intuitiva para seletores CSS
  • Suporte a todas as pseudoclasses e combinadores padrão
  • Alto desempenho
  • Boa documentação


2. Biblioteca select.rs



select.rs — outra biblioteca poderosa para parsing de HTML, baseada no html5ever. Ela oferece uma API semelhante ao jQuery, tornando-a especialmente conveniente para desenvolvedores familiarizados com JavaScript.



Instalação

[dependencies]select = "0.6"


Exemplo: extraindo links

use select::document::Document;use select::predicate::{Name, Class};

fn main() { let html = r#" <html> <body> <a href="https://example.com" class="link">Example</a> <a href="https://rust-lang.org" class="link">Rust</a> </body> </html> "#;

let document = Document::from(html);

for node in document.find(Class("link")) { if let Some(href) = node.attr("href") { println!("Link: {}", href); } }}


Vantagens:

  • Sintaxe semelhante ao jQuery
  • Predicados flexíveis para busca de elementos
  • Suporte a atributos e conteúdo textual


3. Biblioteca html5ever



html5ever — um parser HTML5 de baixo nível escrito em Rust. Ele é a base para muitas outras bibliotecas (incluindo scraper e select.rs). Se você precisa de controle total sobre o processo de parsing, esta é uma excelente escolha.



Instalação

[dependencies]html5ever = "0.27"


Exemplo: tokenização de HTML

use html5ever::tendril::TendrilSink;use html5ever::parse_document;use html5ever::rcdom::{RcDom, Handle, NodeData};

fn main() { let html = "<p>Olá, Rust!</p>"; let dom = parse_document(RcDom::default(), Default::default()) .from_utf8() .read_from(&mut html.as_bytes()) .unwrap();

// Percorrendo a árvore DOM fn walk(node: &Handle, depth: usize) { match node.data { NodeData::Text { ref contents } => { let text = contents.borrow(); println!("{:indent$}Texto: {}", "", text, indent = depth * 2); } NodeData::Element { ref name,

Recommendations