美文网首页
Jsoup 使用

Jsoup 使用

作者: 蕪園樓主香獨秀 | 来源:发表于2016-10-26 14:14 被阅读202次

    Jsoup


    Jsoup 是一款轻量高效的 html 文档解析工具,可类比 xml 中的 dom4jjdom

    Jsoup中的基本类


    • <b>Document</b>

    Html 整个文档在内容中的数据结构,继承 Element

    • <b>Element</b>

    标记元素的数据结构 ,继承 Node

    • <b>Elements</b>

    Element 的集合,继承 ArrayList<Element>

    • <b>Node</b>

    节点,是 Element,Document 的超类,定义了节点的基本方法

    类 Jsoup 解析 HTML 文档的静态方法


    parse method

    <b>jsoup 对于获取 html 元素有三种方式:</b>

    1. 传统的基于元素 ID,CLASS,TAGNAME 获取匹配元素的方法;接口 doc.getElementByXXX()
    2. 基于 css selector 的元素定位获取方法;接口 doc.select(cssQueryString)
    3. 基于元素间的父子兄弟姊妹关系获取;e.parent()e.children()e.child(int index)e.siblingElements()e.firstElementSibling()lastElementSibling()nextElementSibling()previousElementSibling()

    类Selector 的定位查询 HTML 元素方法


    select method

    <b>html 中 selector == xml 中 xpath == database 中 select sql</b>

    点此详见 jsoup

    • 一个小栗子
      @Test
        public void test() throws IOException {
            File f = new File("resource/test.html");
            Document doc = Jsoup.parse(f,"utf-8");
            //JavaScript 链接
            Elements sLinks = doc.select("script[src]");
            for(Element e : sLinks){
                System.out.println("javascript link: "+e.attr("src"));
            }
            hr();
            //javaScript 内容
            Elements sData = doc.select("script");
            for(Element e : sData){
                String data = e.data();
                if(data != null && data.trim().length() > 0){
                    System.out.println("javascript data: "+data);
                }
            }
            hr();
            //css 链接
            Elements cLinks = doc.select("link[rel='stylesheet']");
            for(Element e : cLinks){
                System.out.println("css link: "+e.attr("href"));
            }
            hr();
            //css 内容
            Elements cData = doc.select("style");
            for(Element e : cData){
                String data = e.data();
                if(data != null && data.trim().length() > 0){
                    System.out.println("css data:"+data);
                }
            }
            hr();
            //body 下 javascript 内容
            Elements bContent = doc.select("body");
            for(Element e : bContent){
                System.out.println("body javascript data: "+e.data());
            }
            hr();
            //body 下 所有文本内容(包含子孙标记的文本内容)
            System.out.println("body text: "+bContent.get(0).text());
            hr();
            //<a>标记的所有链接地址
            Elements aHref = doc.select("a[href]");
            for(Element e : aHref){
                System.out.println("a href: "+e.attr("href"));
            }
            hr();
            //<a>标记的以http协议的地址
            Elements aHttp = doc.select("a[href^=http]");
            for(Element e : aHttp){
                System.out.println("a http href : "+e.attr("abs:href"));
            }
            hr();
        }
        
        public static void hr(){
            System.out.println("---------------------------------------------------------------");
        }
    

    相关文章

      网友评论

          本文标题:Jsoup 使用

          本文链接:https://www.haomeiwen.com/subject/nomduttx.html