gpt4 book ai didi

web-scraping - 如何使用爬虫箱获取元素的内部文本?

转载 作者:行者123 更新时间:2023-12-03 11:42:55 25 4
gpt4 key购买 nike

我正在使用scraper库来解析HTML文档,并找到ID为foo的节点。
我想将此节点用于进一步的操作。在此示例中,我尝试使用inner类访问一些嵌套的 child ,并检索这些 child 的innerText

use scraper::{Html, Selector};

fn main() {
let html = String::from(
r#"
<html>
<head>
<title>Test</title>
</head>
<body>
<div id="foo"><div></div><div><div></div><div class="inner"><span>x<div>yo</div></span></div></div></div>
</body>
</html>
"#,
);

let parsed_html = Html::parse_document(&html);
let fragment = parsed_html
.select(&Selector::parse("body").unwrap())
.next()
.unwrap();
let foo = fragment
.select(&Selector::parse("div#foo").unwrap())
.next()
.unwrap();

let text = foo
.children()
.nth(1)
.unwrap()
.children()
.nth(1)
.unwrap()
.children()
.map(|child| child.value())
.collect::<Vec<_>>();

println!("{:?}", text);
}
我的 Cargo.toml文件:
[package]
name = "scraper"
version = "0.1.0"
authors = ["foo@bar"]
edition = "2018"

[dependencies]
scraper = "0.12.0"
rustup show的输出:
Default host: x86_64-apple-darwin
rustup home: /Users/foobar/.rustup

stable-x86_64-apple-darwin (directory override for '/Users/foobar')
rustc 1.43.1 (8d69840ab 2020-05-04)

控制台会打印出 [Element(<span>)],这是映射函数的结果,在该函数中,我在element上调用了 value方法。
我期望的结果是 xyoscraper crate 是否具有某些方法可以像我想要的那样提取文本,还是必须创建某种递归函数?
我知道此代码容易出错,并且我将使用 match运算符来处理文档中某些节点不存在的情况。现在,我仅专注于如何在子节点上获取 innerText属性。

最佳答案

scraper具有一种提取文本的方法: ElementRef::text
.children()调用中获得所需内容的一种方法是:

...
.children()
.filter_map(|child| ElementRef::wrap(child))
.flat_map(|el| el.text())
.collect::<Vec<_>>(); // Or `.collect::<String>()` if you want xyo concatenated
但是,以您的示例为例,我觉得您可能想使用选择器直接获取与您的目标相对应的 ElementRef,而不是使用很多 .children()进行工作:
let inner: String = parsed_html
.select(&Selector::parse("body div#foo:nth-child(1):nth-child(1)").unwrap()) // or "body div#foo div.inner"
.flat_map(|el| el.text())
.collect();
这看起来更接近 what is in the scraper documentation

关于web-scraping - 如何使用爬虫箱获取元素的内部文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63248777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com