Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Kuchiki获取HTML文档的所有文本(script/style/noscript标记除外)?_Html_Rust_Html5ever_Kuchiki - Fatal编程技术网

如何使用Kuchiki获取HTML文档的所有文本(script/style/noscript标记除外)?

如何使用Kuchiki获取HTML文档的所有文本(script/style/noscript标记除外)?,html,rust,html5ever,kuchiki,Html,Rust,Html5ever,Kuchiki,我试图获取HTML页面上的所有文本,除了不可见的文本(例如:我不希望在script/style/noscript标记中包含文本) 以下是我到目前为止的想法: let parser=kuchiki::parse_html().one(内容); 对于parser.inclusive_子体()中的子级{ 如果让一些(el)=子元素as_元素(){ 让tag_name=&el.name.local; 如果tag_name==“script”| | tag_name==“style”| | tag_nam

我试图获取HTML页面上的所有文本,除了不可见的文本(例如:我不希望在script/style/noscript标记中包含文本)

以下是我到目前为止的想法:

let parser=kuchiki::parse_html().one(内容);
对于parser.inclusive_子体()中的子级{
如果让一些(el)=子元素as_元素(){
让tag_name=&el.name.local;
如果tag_name==“script”| | tag_name==“style”| | tag_name==“noscript”{
child.detach();
}
}
}
让text=parser.text_contents();
普林顿!(“{}”,案文);
这个想法是第一次通过将删除任何
脚本
样式
、或
noscript
标记。然后我可以调用
text\u contents
来获取可见的文本

然而,似乎
text\u contents
仍在返回内联Javascript


我是否误解了Kuchiki/html5ever API?

迭代器似乎不喜欢迭代节点并分离它们

鉴于以下情况:

Cargo.toml

[dependencies]
kuchiki = "0.8.1"
main.rs

使用kuchiki::traits::TendrilSink;
让内容=”\
\
\
\
div\
剧本\
noscript\
跨度\
\
";
让parser=kuchiki::parse_html().one(内容);
对于parser.inclusive_子体()中的子级{
如果让一些(el)=子元素as_元素(){
println!(“{}”,el.name.local);
}
}
//普林顿!(“{}”,parser.text_contents());
我们确实获得了所有节点:

html
头
身体
div
剧本
乔治·毛内
跨度
当使用
text\u contents()
对其进行迭代并如上所述分离后,迭代器似乎会在第一个分离的节点后失去跟踪:

div noscript span
它似乎也不取决于标记的类型,因为切换
标记的顺序会给我们带来:

div脚本跨度
我发现在首先收集节点后分离节点似乎确实有效:

解析器

.filter(|节点|{
node.as_element().map_或(false,| e|{
匹配!(e.name.local.as_ref(),“script”|“style”|“noscript”)
})
})
收集::()
.国际热核实验堆(iter)
.for|u each(| node | node.detach());
普林顿!(“{}”,parser.text_contents());
divspan