使用HTMLParser解析HTML文件

xiaoxiao2022-06-11  23

在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 comhttp://www.iteye.com

 

呜呜,^_^

转载请注明原文地址: https://www.6miu.com/read-4931343.html

最新回复(0)