Rust中的HTML解析:库、工具和代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust中的HTML解析:库概览与实践示例



Rust是一种系统编程语言,凭借其高性能、内存安全性和强类型系统,在网络抓取和HTML解析任务中越来越受欢迎。在本文中,我们将介绍Rust中用于HTML解析的主要库、它们的功能,并为每个库提供代码示例。



1. scraper库



scraper是Rust中最流行且最方便的HTML解析库之一。它基于html5ever(HTML5解析器)构建,并提供高级API,通过CSS选择器进行DOM树导航。



安装

[dependencies]scraper = "0.19"


示例:获取文章标题

use scraper::{Html, Selector};

fn main() { let html = r#" <html> <body> <h1 class="title">第一篇文章</h1> <h1 class="title">第二篇文章</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(" ")); }}


优点:

  • 直观的CSS选择器API
  • 支持所有标准伪类和组合器
  • 高性能
  • 良好的文档


2. select.rs库



select.rs是另一个基于html5ever的强大HTML解析库。它提供类似jQuery的API,对于熟悉JavaScript的开发者来说特别方便。



安装

[dependencies]select = "0.6"


示例:提取链接

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


优点:

  • 类似jQuery的语法
  • 灵活的元素查找谓词
  • 支持属性和文本内容


3. html5ever库



html5ever是用Rust编写的低级HTML5解析器。它是许多其他库(包括scraper和select.rs)的基础。如果您需要对解析过程进行完全控制,这是一个很好的选择。



安装

[dependencies]html5ever = "0.27"


示例:HTML词法分析

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

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

// 遍历DOM树 fn walk(node: &Handle, depth: usize) { match node.data { NodeData::Text { ref contents } => { let text = contents.borrow(); println!("{:indent$}文本: {}", "", text, indent = depth * 2); } NodeData::Element { ref name,

推荐