当前位置:编程学习 > JAVA >>

用htmlparser提取html 中的纯文本,获得<p></p>之间的内容

package webutil.htmlutil;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.Div;
import org.htmlparser.tags.ParagraphTag;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;

/**
* 标题:利用htmlparser提取网页纯文本的例子 
* @author 

*/
public class GetT {
   public static void testHtml() {
      try {
        String sCurrentLine;
        String sTotalString;
        sCurrentLine = "";
        sTotalString = "";
        java.io.InputStream l_urlStream;
        java.net.URL l_url = new java.net.URL(
              "http://www.51voa.com/VOA_Special_English/researchers-brain-stimulation-cocaine-addiction-49619.html");
        java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url
              .openConnection();
        l_connection.connect();
        l_urlStream = l_connection.getInputStream();
        java.io.BufferedReader l_reader = new java.io.BufferedReader(
              new java.io.InputStreamReader(l_urlStream));
        while ((sCurrentLine = l_reader.readLine()) != null) {
           sTotalString += sCurrentLine+"\r\n";
        }
//        System.out.println(sTotalString);

        System.out.println("====================");
        String testText = extractText(sTotalString);
        System.out.println(testText);
      } catch (Exception e) {
        e.printStackTrace();
      }

   }

   /**
    * 抽取纯文本信息
    * 
    * @param inputHtml
    * @return
    */
   public static String extractText(String inputHtml) throws Exception {
      StringBuffer text = new StringBuffer();
//      System.out.println(inputHtml);
      Parser parser = Parser.createParser(new String(inputHtml.getBytes(),
           "GBK"), "GBK");
      // 遍历所有的节点
      NodeFilter[] filters = new NodeFilter[3];
      filters[0] = new NodeClassFilter(TableTag.class);
      filters[1] = new NodeClassFilter(ParagraphTag.class);
      filters[2] = new NodeClassFilter(Div.class);
      NodeFilter filter =new OrFilter(filters);
      
      NodeList list = parser.extractAllNodesThatMatch(filter);
//      for(int i =0;i<list.size();i++){
//       System.out.println(list.elementAt(i).toHtml());
//      }

      System.out.println(list.size());
      for (int i=0;i<list.size();i++){
       Node nodet = list.elementAt(i);
//       System.out.println("NODES["+i+"]:"+new String(nodet.toPlainTextString().getBytes("GBK")));
        text.append(new String(nodet.toPlainTextString().getBytes("GBK"))+"\r\n");       
      }
    System.out.println(text.toString());
      return text.toString();
   }

   /**
    * 读取文件的方式来分析内容. filePath也可以是一个Url.
    * 
    * @param resource
    *        文件/Url
    */
   public static void test5(String resource) throws Exception {
      Parser myParser = new Parser(resource);

      // 设置编码
      myParser.setEncoding("GBK");
      String filterStr = "table";
      NodeFilter filter = new TagNameFilter(filterStr);
      NodeList nodeList = myParser.extractAllNodesThatMatch(filter);
      TableTag tabletag = (TableTag) nodeList.elementAt(11);
        
        System.out.println(tabletag.toHtml());
        
        System.out.println("==============");

   }

   public static void main(String[] args) throws Exception {
//      test5("http://news.ccidnet.com/index.htm");
      testHtml();
   }
} --------------------编程问答-------------------- 用HasChildFilter可以解决? --------------------编程问答-------------------- 求
"用htmlparser提取html 中的纯文本,获得<p></p>之间的内容 "
完整代码
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,