cyberneko和dom4j解析html

 



闲着无聊用cyberneko和dom4j写了个解析html图片的小程序,在这里贴出主要代码如下
Java代码 复制代码  收藏代码
  1.     public void  testPaseHtml(){   
  2.             String url = "http://www.iteye.com/";   
  3.             Document document = this.getDoc(url);//获取document   
  4.             String gz = "//xmlns:IMG/@src";//xpath匹配   
  5.             List nodes = this.getAttr(document,gz);//获取属性   
  6.             String[] photoUrl = this.getUrl(nodes);//获取url   
  7.             this.insertPhoto(this.getConn(),photoUrl);//插入图片   
  8.     }   
  9.     /**  
  10.      * 获取属性  
  11.      * @param document  
  12.      * @param gz  
  13.      * @return  
  14.      */  
  15.     public List getAttr(Document document,String gz){   
  16.          Map nameSpaces=new HashMap();   
  17.             XPath xpath=new DefaultXPath(gz);   
  18.             nameSpaces.put("xmlns","http://www.w3.org/1999/xhtml");   
  19.             xpath.setNamespaceContext(new SimpleNamespaceContext(nameSpaces));   
  20.             List nodes=xpath.selectNodes(document);   
  21.             return nodes;   
  22.     }   
  23.     /**  
  24.      * 获取Document  
  25.      * @param url  
  26.      * @return  
  27.      */  
  28. public Document getDoc(String url){   
  29.     DOMParser parser = new DOMParser();   
  30.      try {   
  31.         parser.parse(url);   
  32.     } catch (SAXException e1) {   
  33.         // TODO Auto-generated catch block   
  34.         e1.printStackTrace();   
  35.     } catch (IOException e1) {   
  36.         // TODO Auto-generated catch block   
  37.         e1.printStackTrace();   
  38.     }   
  39.      org.w3c.dom.Document doc=parser.getDocument();    
  40.   
  41.      //SAXReader reader = new SAXReader();   
  42.         DOMReader domReader=new DOMReader();   
  43.         Document document =domReader.read(doc);   
  44.         return document;   
  45. }   
  46. /**  
  47.  * 获取图片路径  
  48.  * @param nodes  
  49.  * @return  
  50.  */  
  51.     public String[] getUrl(List nodes){   
  52.         if(nodes==null){   
  53.             return null;   
  54.         }   
  55.           Iterator iter=nodes.iterator();   
  56.           String[] url = new String[nodes.size()];   
  57.            for(int i=0;iter.hasNext();i++){   
  58.                 Attribute attribute=(Attribute)iter.next();   
  59.                 url[i] = attribute.getValue();      
  60.            }   
  61.            return url;   
  62.     }   
  63.     /**  
  64.      * 获取图片流  
  65.      * @param path  
  66.      * @return  
  67.      */  
  68.     public InputStream getInput(String path){   
  69.             URL url = null;   
  70.             try {   
  71.                 url = new URL(path);   
  72.             } catch (MalformedURLException e1) {   
  73.                 // TODO Auto-generated catch block   
  74.                 e1.printStackTrace();   
  75.             }   
  76.             URLConnection conn = null;   
  77.             try {   
  78.                 conn = url.openConnection();   
  79.             } catch (IOException e1) {   
  80.                 // TODO Auto-generated catch block   
  81.                 e1.printStackTrace();   
  82.             }   
  83.             conn.setDoOutput(true);    
  84.                
  85.             InputStream inputStream = null;   
  86.             try {   
  87.                 inputStream = conn.getInputStream();   
  88.             } catch (IOException e) {   
  89.                 // TODO Auto-generated catch block   
  90.                 e.printStackTrace();   
  91.             }   
  92.             return inputStream;   
  93.     }   
  94.     /**  
  95.      * 插入图片入数据库  
  96.      * @param conn  
  97.      * @param photoUrl  
  98.      */  
  99. public void insertPhoto(Connection conn,String[] photoUrl){   
  100.            String sql = "insert into photo set photo = ?";   
  101.            PreparedStatement ps;   
  102.             
  103.             try {   
  104.               conn.setAutoCommit(false);   
  105.             ps = conn.prepareStatement(sql);   
  106.             for(int i=0;i<photoUrl.length;i++){   
  107.                 if("".equals(photoUrl[i]))continue;   
  108.                 InputStream inputStream = this.getInput("http://www.iteye.com/"+photoUrl[i]);   
  109.                 ps.setBinaryStream(1, inputStream, inputStream.available());   
  110.                 ps.addBatch();   
  111.                 inputStream.close();   
  112.             }   
  113.             ps.executeBatch();   
  114.             conn.commit();   
  115.             conn.close();   
  116.         } catch (SQLException e) {   
  117.             // TODO Auto-generated catch block   
  118.             e.printStackTrace();   
  119.         } catch (IOException e) {   
  120.             // TODO Auto-generated catch block   
  121.             e.printStackTrace();   
  122.         }   
  123.            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设置解析器参数   为了更加精确的控制解析的动作,nekohtml提供了相应的设置函数。如下列: // settings on HTMLConfiguration org.apache.xerces.xni.parser.XMLParserConfiguration config = new org.cyberneko.html.HTMLConfiguration(); config.setFeature("http://cyberneko.org/html/features/augmentations", true); config.setProperty("http://cyberneko.org/html/properties/names/elems", "lower"); // settings on DOMParser org.cyberneko.html.parsers.DOMParser parser = new org.cyberneko.html.parsers.DOMParser(); parser.setFeature("http://cyberneko.org/html/features/augmentations", true); parser.setProperty("http://cyberneko.org/html/properties/names/elems", "lower");nekohtml功能(feature)列表 功能 默认值 描述 http://cyberneko.org/html/features/balance-tags True 是否允许增补缺失的标签。如果要以XML方式操作HTML文件,此值必须为真。此处提供设置功能,为了性能的原因。 http://cyberneko.org/html/features/balance-tags/ignore-outside-content False 是否忽略文档根元素以后的数据。如果为false,<html>和<bod>被忽略,所有的内容都被解析。 http://cyberneko.org/html/features/document-fragment False 解析HTML片段时是否作标签增补。此功能不要用在DOMParser上,而要用在DOMFragmentParser上。 http://apache.org/xml/features/scanner/notify-char-refs False 当遇到字符实体引用(如&#x20;)是否将(#x20)报告给相应地文档处理器。 http://apache.org/xml/features/scanner/notify-builtin-refs False 当遇到XML内建的字符实体引用(如&amp;)是否将(amp)报告给相应地文档处理器。 http://cyberneko.org/html/features/scanner/notify-builtin-refs False 当遇到HTML内建的字符实体引用(如&copy;)是否将(copy)报告给相应地文档处理器。 http://cyberneko.org/html/features/scanner/script/strip-comment-delims False 是否剥掉<script>元素中的<!-- -->等注释符。 http://cyberneko.org/html/features/augmentations False 是否将与HTML事件有关的infoset项包括在解析管道中。 http://cyberneko.org/html/features/report-errors False 是否报告错误。nekohtml属性列表 属性 默认值 值域 描述 http://cyberneko.org/html/properties/filters null XMLDocumentFilter[] 在解析管道的最后按数组顺序追加自定义的处理组件(过滤器),必须为数组类型。 http://cyberneko.org/html/properties/default-encoding Windows-1252 IANA encoding names 默认的HTML文件编码 http://cyberneko.org/html/properties/names/elems upper upper,lower,match 如果整理识别出的元素名称 http://cyberneko.org/html/properties/names/attrs lower upper,lower,no-change 如果整理识别出的属性名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值