在 Rust 中,你可以使用各种库来解析网页内容。一个常用的库是 reqwest
,它提供了一个简单的方式来发送 HTTP 请求并获取网页内容。另外,你可以使用 scraper
或 select
等库来解析 HTML 或 XML 格式的网页内容。
下面是一个使用 reqwest
和 scraper
库解析网页内容的示例:
首先,将以下内容添加到你的 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 的元素。
- 解析出
<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);
}
}
- 解析出指定 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);
}
}
- 解析出指定 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);
}
}