如何使用Kuchiki获取HTML文档的所有文本(script/style/noscript标记除外)?
我试图获取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
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