Here's what you are trying to do, with a one liner:
fn get_links(mut link_nodes: Select) -> Vec<String> {
link_nodes.retain(|node| node.value().attr("href").is_some()).into_iter().fold(Vec::new(), |links, node| links.push(link.value().attr("href").unwrap().to_string()))
}
edit: shorter and updated version:
fn get_links(mut link_nodes: Select) -> Vec<String> {
link_nodes.into_iter().filter_map(|node| node.value().attr("href").map(|href| href.to_string())).collect()
}
The retain method is to get rid of all the nodes which don't have a href attribute and the fold method after it is to extract the href out of the nodes and push them into the vector.
It might work or not, I've written this from my memory and I can't exactly know what that Select is.
I also hope you begin reading The Book without half assing it.
What source? That was obvious sarcasm.