Parseo de HTML en Rust: bibliotecas, herramientas y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Parseo de HTML en Rust: descripción general de bibliotecas y ejemplos prácticos



Rust es un lenguaje de programación de sistemas que está ganando popularidad en tareas de web scraping y parseo de HTML gracias a su rendimiento, seguridad de memoria y tipado estricto. En este artículo, revisaremos las principales bibliotecas para parsear HTML en Rust, sus capacidades y proporcionaremos ejemplos de código para cada una.



1. Biblioteca scraper



scraper es una de las bibliotecas más populares y convenientes para parsear HTML en Rust. Está construida sobre html5ever (analizador HTML5) y proporciona una API de alto nivel para navegar por el árbol DOM mediante selectores CSS.



Instalación

[dependencies]scraper = "0.19"


Ejemplo: obtención de títulos de artículos

use scraper::{Html, Selector};

fn main() { let html = r#" <html> <body> <h1 class="title">Primer artículo</h1> <h1 class="title">Segundo artículo</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(" ")); }}


Ventajas:

  • API intuitiva para selectores CSS
  • Soporte para todas las pseudoclases y combinadores estándar
  • Alto rendimiento
  • Buena documentación


2. Biblioteca select.rs



select.rs es otra biblioteca potente para parsear HTML, basada en html5ever. Ofrece una API similar a jQuery, lo que la hace especialmente conveniente para desarrolladores familiarizados con JavaScript.



Instalación

[dependencies]select = "0.6"


Ejemplo: extracción de enlaces

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!("Enlace: {}", href); } }}


Ventajas:

  • Sintaxis similar a jQuery
  • Predicados flexibles para buscar elementos
  • Soporte para atributos y contenido de texto


3. Biblioteca html5ever



html5ever es un analizador HTML5 de bajo nivel escrito en Rust. Es la base de muchas otras bibliotecas (incluyendo scraper y select.rs). Si necesita control total sobre el proceso de parseo, esta es una excelente opción.



Instalación

[dependencies]html5ever = "0.27"


Ejemplo: tokenización de HTML

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

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

// Recorrido del árbol 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