没有jsoup,rust怎么解析html呢?

在 Rust 中,你可以使用各种库来解析网页内容。一个常用的库是 reqwest ,它提供了一个简单的方式来发送 HTTP 请求并获取网页内容。另外,你可以使用 scraperselect 等库来解析 HTML 或 XML 格式的网页内容。

下面是一个使用 reqwestscraper 库解析网页内容的示例:

首先,将以下内容添加到你的 Cargo.toml 文件中:

bash 复制代码
[dependencies]
reqwest = "0.11"
scraper = "0.12"

然后,创建一个 Rust 文件,并添加以下代码:

bash 复制代码
use reqwest::blocking::get;
use scraper::{Html, Selector};
 fn main() {
    // 发送 HTTP GET 请求获取网页内容
    let response = get("https://example.com").expect("Failed to send request");
    let body = response.text().expect("Failed to get response body");
     // 使用 scraper 解析 HTML
    let document = Html::parse_document(&body);
    let selector = Selector::parse("h1").expect("Failed to parse selector");
     // 提取特定元素的内容
    let h1_text = document.select(&selector).next().map(|element| element.text().collect::<String>());
     // 打印提取的内容
    if let Some(text) = h1_text {
        println!("H1 Text: {}", text);
    } else {
        println!("No H1 element found");
    }
}

在这个示例中,我们使用 reqwest 库发送 HTTP GET 请求并获取网页内容。然后,我们使用 scraper 库解析 HTML 内容。在这个示例中,我们使用 Selector 来选择 <h1> 元素,并提取其文本内容。

下面我们再看下 Selector 的其他用法,下面是三个使用 scraper 库的 Selector 类的示例,分别用于解析出 <p> 标签、解析出指定 class 的元素以及解析出指定 id 的元素。

  1. 解析出 <p> 标签:
rust 复制代码
use scraper::{Html, Selector};
 fn main() {
    let html = r#"
        <html>
            <body>
                <div>
                    <p>Paragraph 1</p>
                    <p>Paragraph 2</p>
                </div>
            </body>
        </html>
    "#;
     let document = Html::parse_document(html);
    let selector = Selector::parse("p").unwrap();
     for element in document.select(&selector) {
        let text = element.text().collect::<String>();
        println!("Text: {}", text);
    }
}
  1. 解析出指定 class 的元素:
rust 复制代码
use scraper::{Html, Selector};
 fn main() {
    let html = r#"
        <html>
            <body>
                <div>
                    <p class="highlight">Paragraph 1</p>
                    <p>Paragraph 2</p>
                </div>
            </body>
        </html>
    "#;
     let document = Html::parse_document(html);
    let selector = Selector::parse("p.highlight").unwrap();
     for element in document.select(&selector) {
        let text = element.text().collect::<String>();
        println!("Text: {}", text);
    }
}
  1. 解析出指定 id 的元素:
rust 复制代码
use scraper::{Html, Selector};
 fn main() {
    let html = r#"
        <html>
            <body>
                <div>
                    <p id="my-paragraph">Paragraph 1</p>
                    <p>Paragraph 2</p>
                </div>
            </body>
        </html>
    "#;
     let document = Html::parse_document(html);
    let selector = Selector::parse("#my-paragraph").unwrap();
     for element in document.select(&selector) {
        let text = element.text().collect::<String>();
        println!("Text: {}", text);
    }
}
相关推荐
软件技术NINI4 小时前
html css网页制作成品——HTML+CSS盐津铺子网页设计(5页)附源码
前端·css·html
muyouking115 小时前
Tauri Android 开发踩坑实录:从 Gradle 版本冲突到离线构建成功
android·rust
Kiri霧5 小时前
Rust开发环境搭建
开发语言·后端·rust
weixin_ab9 小时前
【HTML分离术】
前端·html
咚咚咚小柒15 小时前
【前端】用el-popover做通用悬停气泡(可设置弹框宽度)
前端·javascript·vue.js·elementui·html·scss
Hello123网站17 小时前
300多个Html5小游戏列表和下载地址
前端·html·html5
xuejianxinokok18 小时前
什么是代数类型 ? java为什么要添加record,Sealed class 和增强switch ?
后端·rust
星光一影19 小时前
HIS系统天花板,十大核心模块,门诊/住院/医保全流程打通,医院数字化转型首选
java·spring boot·后端·sql·elementui·html·scss
linksinke20 小时前
html案例:制作一个图片水印生成器,防止复印件被滥用
开发语言·前端·程序人生·html
寒月霜华20 小时前
JavaWeb-html、css-网页正文制作
前端·css·html