其实rust 早就有了相似的crate,可是这些轮子语法都有点繁琐,并且基本都只能查询,不能修改元素, use nipper::Document;
因此就在清明搞了这么一个东西,借鉴了golang里的goquery,语法就是css 选择器的语法。
let html = include_str!("../test-pages/hacker_news.html");let document = Document::from(html);
document.select("tr.athing").iter().for_each(|athing| { let title = athing.select(".title a"); let source = title.select(".sitestr"); // The next sibling. let meta = athing.next(); let score = meta.select("span.score"); let hnuser = meta.select("a.hnuser"); let age = meta.select("span.age"); // The last matched element. let comment = meta.select("a").last();
println!("Title: {}", title.text()); if source.exists() { println!("> from: {}", source.text()); } if score.exists() { println!("> {}", score.text()); } if hnuser.exists() { println!("> by {}", hnuser.text()); } println!("> {}", age.text()); println!("> {}", comment.text()); println!();});
本文分享自微信公众号 - Rust语言中文社区(rust-china)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。css