在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
呜呜,^_^