写了一个轮子 nipper,顾名思义就是用来像镊子一样操作 HTML 的。
可以使用 css 选择器的语法在给定的 html 里查询需要的元素,甚至是修改这些元素。


use nipper::Document;  
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 早就有了类似的 crate,但是这些轮子语法都有点繁琐,而且基本都只能查询,不能修改元素,  
所以就在清明搞了这么一个东西,借鉴了 golang 里的 goquery,语法就是 css 选择器的语法。

大家如果觉得不错的话,可以点赞支持一波,谢谢!https://github.com/importcjj/nipper

来源链接:mp.weixin.qq.com