scraperでfor文を使わないで上手くプログラムする方法
下記の様にfor文を使わずに記述したいと考えていますがエラーが出てしまいます。
正直for_eachとmapの違いがいまいちわからず、
下記のコードもmapなのかfor_eachなのか悩んでいます。
どの様に記述するのが良いでしょうか?
use scraper::{Selector, Html};
fn main(){
let html = r#"
<!DOCTYPE html>
<body>
<div>
<ul>
<li>Foo1</li>
<li>Foo2</li>
<li>Foo3</li>
</ul>
</div>
<div>
<ul>
<li>Foo4</li>
<li>Foo5</li>
<li>Foo6</li>
</ul>
</div>
</body>
"#;
let document = Html::parse_document(html);
let selector = Selector::parse("div").unwrap();
let ul = Selector::parse("ul").unwrap();
let li = Selector::parse("li").unwrap();
let v :Vec<_> = document.select(&selector)
.for_each(|item| item.select(&ul))
.for_each(|item| item.select(&li))
.for_each(|item| item.inner_html())
.collect();
println!("{:?}",v);
}
error
error[E0308]: mismatched types
--> src/main.rs:28:26
|
28 | .for_each(|item| item.select(&ul))
| ^^^^^^^^^^^^^^^^ expected (), found struct `scraper::element_ref::Select`
|
= note: expected type `()`
found type `scraper::element_ref::Select<'_, '_>`
error[E0599]: no method named `for_each` found for type `()` in the current scope
--> src/main.rs:29:10
|
29 | .for_each(|item| item.select(&li))
| ^^^^^^^^
|
= note: the method `for_each` exists but the following trait bounds were not satisfied:
`&mut () : std::iter::Iterator`