使用HTMLParser解析HTML文件

在Luence搜索引擎中必须得到文件的InputStream的流对象的同时解析文件流中的信息:可以使用的集中组件:nokeHTML解析和HTMLParser解析。所以分别使用两个组件做解析比较结果

 

使用HTMLParser解析文件的内容测试类如下:

package com.unutrip.remoting.ws;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

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.nodes.TextNode;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.visitors.HtmlPage;

/**
 *
 * @author longgangbai
 *
 */
public class ParserHTML {
 /**
  * 入口方法.
  *
  * @param args
  * @throws Exception
  */
 public static void main(String args[]) throws Exception {
  String path = "http://topmanopensource.iteye.com/";
  URL url = new URL(path);
  URLConnection conn = url.openConnection();
  conn.setDoOutput(true);

  InputStream inputStream = conn.getInputStream();
  InputStreamReader isr = new InputStreamReader(inputStream, "utf8");
  StringBuffer sb = new StringBuffer();
  BufferedReader in = new BufferedReader(isr);
  String inputLine;

  while ((inputLine = in.readLine()) != null) {
   sb.append(inputLine);
   sb.append("\n");
  }

  String result = sb.toString();

  readByHtml(result);
  readTextAndLinkAndTitle(result);
 }

 /** */
 /**
  * 按页面方式处理.解析标准的html页面
  *
  * @param content
  *            网页的内容
  * @throws Exception
  */
 public static void readByHtml(String content) throws Exception {
  Parser myParser;
  myParser = Parser.createParser(content, "utf8");
  HtmlPage visitor = new HtmlPage(myParser);
  myParser.visitAllNodesWith(visitor);

  String textInPage = visitor.getTitle();
  System.out.println(textInPage);
  NodeList nodelist;
  nodelist = visitor.getBody();

  System.out.print(nodelist.asString().trim());
 }

 /** */
 /**
  * 分别读纯文本和链接.
  *
  * @param result
  *            网页的内容
  * @throws Exception
  */
 public static void readTextAndLinkAndTitle(String result) throws Exception {
  Parser parser;
  NodeList nodelist;
  parser = Parser.createParser(result, "utf8");
  NodeFilter textFilter = new NodeClassFilter(TextNode.class);
  NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
  NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);
  OrFilter lastFilter = new OrFilter();
  lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter,
    titleFilter });
  nodelist = parser.parse(lastFilter);
  Node[] nodes = nodelist.toNodeArray();
  String line = "";

  for (int i = 0; i < nodes.length; i++) {
   Node node = nodes[i];
   if (node instanceof TextNode) {
    TextNode textnode = (TextNode) node;
    line = textnode.getText();
   } else if (node instanceof LinkTag) {
    LinkTag link = (LinkTag) node;
    line = link.getLink();
   } else if (node instanceof TitleTag) {
    TitleTag titlenode = (TitleTag) node;
    line = titlenode.getTitle();
   }

   if (isTrimEmpty(line))
    continue;
   System.out.println(line);
  }
 }

 /** */
 /**
  * 去掉左右空格后字符串是否为空
  */
 public static boolean isTrimEmpty(String astr) {
  if ((null == astr) || (astr.length() == 0)) {
   return true;
  }
  if (isBlank(astr.trim())) {
   return true;
  }
  return false;
 }

 /** */
 /**
  * 字符串是否为空:null或者长度为0.
  */
 public static boolean isBlank(String astr) {
  if ((null == astr) || (astr.length() == 0)) {
   return true;
  } else {
   return false;
  }
 }
}

 

解析HTML内容可以。但是不知道两者的效率怎么样呢?

结果:javaeye禁止非法的网络工具爬虫,必须确定是安全爬虫!显示如下信息:

 

您的访问请求被拒绝 - JavaEye技术社区
您的访问请求被拒绝
   
   
     
       
     
     
        您可能使用了网络爬虫抓取JavaEye网站页面!
        JavaEye网站不允许您使用网络爬虫对JavaEye进行恶意的网页抓取,请您立刻停止该抓取行为!
        如果您的网络爬虫不属于恶意抓取行为,希望JavaEye网站允许你进行网页抓取,请和JavaEye管理员联系,取得授权: webmaster AT javaeye DOT com
        如果您确实使用浏览器访问,但是被错误的识别为网络爬虫,请将您浏览器发送的“User Agent”信息告知我们,帮助我们解决错误: webmaster AT javaeye DOT com您的访问请求被拒绝 - JavaEye技术社区
您的访问请求被拒绝 - JavaEye技术社区

      .clearfix:after {
        content: ".";
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
      }
      .clearfix {
        display:block;
      }
      .left {
        float: left;
      }
      h1 {font-size: 20px;color: #6293BB;}
      p  {font-size: 14px;color: #6293BB;}
   
您的访问请求被拒绝
您可能使用了网络爬虫抓取JavaEye网站页面!
JavaEye网站不允许您使用网络爬虫对JavaEye进行恶意的网页抓取,请您立刻停止该抓取行为!
如果您的网络爬虫不属于恶意抓取行为,希望JavaEye网站允许你进行网页抓取,请和JavaEye管理员联系,取得授权: webmaster AT javaeye DOT com
如果您确实使用浏览器访问,但是被错误的识别为网络爬虫,请将您浏览器发送的“User Agent”信息告知我们,帮助我们解决错误: webmaster AT javaeye DOT com
http://www.iteye.com

 

呜呜,^_^

你可能感兴趣的:(html,.net,搜索引擎,浏览器)