优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:htmlcleaner使用案例

htmlcleaner 下载地址:htmlcleaner2_1.jar 源码下载:htmlcleaner2_1-all.zip

写一个测试用的html文件:html-clean-demo.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >   
  2. html   xmlns = "http://www.w3.org/1999/xhtml "   xml:lang = "zh-CN"   dir = "ltr" >  
  3. head >   
  4.     meta   http-equiv = "Content-Type"   content = "text/html; charset=GBK" />   
  5.     meta   http-equiv = "Content-Language"   content = "zh-CN" />   
  6.     title > html clean demo </ title >   
  7. </ head >   
  8. body >   
  9. div   class = "d_1" >   
  10.     ul >   
  11.         li > bar </ li >   
  12.         li > foo </ li >   
  13.         li > gzz </ li >   
  14.     </ ul >   
  15. </ div >   
  16. div >   
  17.     ul >   
  18.         li a   name = "my_href"   href = "1.html" > text-1 </ </ li >   
  19.         li a   name = "my_href"   href = "2.html" > text-2 </ </ li >   
  20.         li a   name = "my_href"   href = "3.html" > text-3 </ </ li >   
  21.         li a   name = "my_href"   href = "4.html" > text-4 </ </ li >   
  22.     </ ul >   
  23. </ div >   
  24. </ body >   
  25. </ html >   
 

模拟需求:取出title,name="my_href" 的链接,div的class="d_1"下的所有li内容。下面用htmlcleaner写代码,HtmlCleanerDemo.java

  1. package  com.chenlb;  
  2.   
  3. import  java.io.File;  
  4.   
  5. import  org.htmlcleaner.HtmlCleaner;  
  6. import  org.htmlcleaner.TagNode;  
  7.   
  8. /**  
  9.  * htmlcleaner 使用示例.  
  10.  *  
  11.  * @author chenlb 2008-11-26 下午02:12:02  
  12.  */   
  13. public   class  HtmlCleanerDemo {  
  14.   
  15.     public   static   void  main(String[] args)  throws  Exception {  
  16.         HtmlCleaner cleaner = new  HtmlCleaner();  
  17.   
  18.         TagNode node = cleaner.clean(new  File( "html/html-clean-demo.html" ),  "GBK");  
  19.         //按tag取.   
  20.         Object[] ns = node.getElementsByName("title" ,  true );     //标题   
  21.   
  22.         if (ns.length >  0 ) {  
  23.             System.out.println("title=" +((TagNode)ns[ 0 ]).getText());  
  24.         }  
  25.         System.out.println("ul/li:" );  
  26.         //按xpath取   
  27.         ns = node.evaluateXPath("//div[@class='d_1']//li" );  
  28.         for (Object on : ns) {  
  29.             TagNode n = (TagNode) on;  
  30.             System.out.println("\ttext=" +n.getText());  
  31.         }  
  32.         System.out.println("a:" );  
  33.         //按属性值取   
  34.         ns = node.getElementsByAttValue("name" ,  "my_href" ,  true ,  true );  
  35.         for (Object on : ns) {  
  36.             TagNode n = (TagNode) on;  
  37.             System.out.println("\thref=" +n.getAttributeByName( "href" )+ ", text=" +n.getText());  
  38.         }  
  39.     }  
  40. }  
 

cleaner.clean()中的参数,可以是文件,可以是url,可以是字符串内容。个人认为:比较常用的应该是evaluateXPath、 getElementsByAttValue、getElementsByName方法了。另外说明下,htmlcleaner 对不规范的html兼容性比较好。

 

posted @ 2017-01-13 14:52  知我者,足以  阅读(428)  评论(0编辑  收藏  举报