1. 程式人生 > >HtmlParser提取網頁中的純文字資訊-java

HtmlParser提取網頁中的純文字資訊-java

    HTMLParser 一個解析web頁面的開源類庫。 
    
    準備學習下搜尋方面的技術,就學習了些網路爬蟲的知識。最近一直在一個點上困惑,如何提取一個網頁上的純文字資訊。要使用正則表示式的話呢,需要考慮很多因素,而且標籤也太多,不是很方便,效果也不好。就準備利用開源包,最後選擇了HtmlParser。 

    在網上搜索如何利用HtmlParser提取頁面資訊。提取的結果都不是很理想,都包含了很多無用空格資訊,還有很多JS程式碼。 

如利用如下的程式碼: 
Java程式碼
  1. publicvoid getWebPageContent(String htmlContent) {  
  2.         Parser parser = new Parser();  
  3.         try {  
  4.             parser.setInputHTML(htmlContent);  
  5.             parser.setEncoding(parser.getURL());  
  6.             HtmlPage page = new HtmlPage(parser);  
  7.             parser.visitAllNodesWith(page);  
  8.             logger.info(page.getTitle());  
  9.             NodeList list = page.getBody();  
  10.             StringBuffer sb = new StringBuffer();  
  11.             for (NodeIterator iterator = list.elements(); iterator  
  12.                     .hasMoreNodes();) {  
  13.                 Node node = iterator.nextNode();  
  14.                 logger.info(node.toPlainTextString());  
  15.         } catch (ParserException e) {  
  16.             // TODO Auto-generated catch block
  17.             e.printStackTrace();  
  18.         }  
  19.     }  

就包含了很多的空格資訊以及JS程式碼。 


後來在HTMLParser的API中的org.htmlparser.beans.StringBean類的描述中找到如下一段文字:
 
Java程式碼
  1. Extract strings from a URL.   
  2. Text within <SCRIPT></SCRIPT> tags is removed.  
  3. The text within <PRE></PRE> tags is not altered.  
  4. The property Strings, which is the output property is null until a URL is set. So a typical usage is:  
  5.      StringBean sb = new StringBean ();  
  6.      sb.setLinks (false);  
  7.      sb.setReplaceNonBreakingSpaces (true);  
  8.      sb.setCollapse (true);  
  9.      sb.setURL ("http://www.netbeans.org"); // the HTTP is performed here  
  10.      String s = sb.getStrings ();  


利用後,如下: 
Java程式碼
  1. /** 
  2.      * 根據提供的URL,獲取此URL對應網頁的純文字資訊 
  3.      * @param url 提供的URL連結 
  4.      * @return RL對應網頁的純文字資訊 
  5.      * @throws ParserException 
  6.      */
  7.     public String getText(String url)throws ParserException{  
  8.         StringBean sb = new StringBean();  
  9.         //設定不需要得到頁面所包含的連結資訊
  10.         sb.setLinks(false);  
  11.         //設定將不間斷空格由正規空格所替代
  12.         sb.setReplaceNonBreakingSpaces(true);  
  13.         //設定將一序列空格由一個單一空格所代替
  14.         sb.setCollapse(true);  
  15.         //傳入要解析的URL
  16.         sb.setURL(url);  
  17.         //返回解析後的網頁純文字資訊
  18.         return sb.getStrings();  
  19.     }