zoukankan      html  css  js  c++  java
  • htmlcleaner使用及xpath语法初探

    一、HtmlCleaner使用:

    1、HtmlCleaner

    HtmlCleaner是一个开源的Java语言的Html文档解析器。HtmlCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的 HTML 文档。默认它遵循的规则是类似于大部份web浏览器为创文档对象模型所使用的规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。

    主页地址:http://htmlcleaner.sourceforge.net/

    2、基本示例,在wikipedia中抓取机场信息

    import java.io.UnsupportedEncodingException;  
      
    import org.htmlcleaner.HtmlCleaner;  
    import org.htmlcleaner.TagNode;  
    import org.htmlcleaner.XPatherException;  
    import org.slf4j.Logger;  
    import org.slf4j.LoggerFactory;  
      
    //import com.moore.index.BabyStory;  
    import com.moore.util.HttpClientUtil;  
      
    /** 
     * 用途:TODO 
     *  
     * @author bbdtek 
     */  
    public class ParserAirport {  
        private static Logger log = LoggerFactory.getLogger(ParserAirport.class);  
      
        /** 
         * @param args 
         * @throws UnsupportedEncodingException 
         * @throws XPatherException 
         */  
        public static void main(String[] args) throws UnsupportedEncodingException,  
                XPatherException {  
            String url = "http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E6%9C%BA%E5%9C%BA%E5%88%97%E8%A1%A8";  
      
            String contents = HttpClientUtil.getUtil().getCon(url);  
      
            HtmlCleaner hc = new HtmlCleaner();  
            TagNode tn = hc.clean(contents);  
            String xpath = "//div[@class='mw-content-ltr']//table[@class='wikitable + sortable']//tbody//tr[@align='right']";  
            Object[] objarr = null;  
            objarr = tn.evaluateXPath(xpath);  
      
            if (objarr != null && objarr.length > 0) {  
                for (Object obj : objarr) {  
                    TagNode tntr = (TagNode) obj;  
                    String xptr = "//td[@align='left']//a";  
                    Object[] objarrtr = null;  
                    objarrtr = tntr.evaluateXPath(xptr);  
      
                    if (objarrtr != null && objarrtr.length > 0) {  
                        for (Object obja : objarrtr) {  
                            TagNode tna = (TagNode) obja;  
                            String str = tna.getText().toString();  
                            log.info(str);  
      
                        }  
      
                    }  
      
                }  
      
            }  
      
        }  
      
    }  
    

      二、XPath初探

    1、XPath简介:

    XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

    2、XPath节点选取

    XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

    下面列出了最有用的路径表达式:

    表达式描述
    nodename 选取此节点的所有子节点。
    / 从根节点选取。
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    . 选取当前节点。
    .. 选取当前节点的父节点。
    @ 选取属性。

    一些常用表达式

    路径表达式结果
    /bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
    /bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
    /bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
    /bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
    //title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
    //title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
    /bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
    /bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
  • 相关阅读:
    Parameter Binding in ASP.NET Web API
    Which HTTP methods match up to which CRUD methods?
    ErrorHandling in asp.net web api
    HttpStatusCode
    Autofac Getting Started(默认的构造函数注入)
    Autofac Controlling Scope and Lifetime
    luvit 被忽视的lua 高性能框架(仿nodejs)
    undefined与null的区别
    VsCode中使用Emmet神器快速编写HTML代码
    字符串匹配---KMP算法
  • 原文地址:https://www.cnblogs.com/jifeng/p/6432406.html
Copyright © 2011-2022 走看看