- 浏览: 405972 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
junchao_qin:
[img][flash=200,200][url][img]引 ...
MyEclipse中使用VSS插件 -
tigerwood008:
IE11不好用!!
js弹出窗口 + 获取上传文件全路径 -
TheMatrix:
$.ajaxSetup({async : false});这种 ...
jquery 中的post和get方法如何同步 -
多多成长记:
Blazeds与java通信 -
ZED.CWT:
[align=ceiinter][/align]
java中利用JFrame创建窗体 【转】
转自:http://blog.csdn.net/scud/article/details/451397
解析Html页面:HTML Parser的试用
作者:scud(飞云小侠) http://www.jscud.com 转载请注明作者来源.否则请勿转载,谢谢.
最近在研究lucene的全文检索,在很多地方需要解析或者说分析Html内容或者Html页面,Lucene本身的演示程序中也提供了一个Html Parser,但是不是纯Java的解决方案.于是到处搜索,在网上找到了一个"HTMLParser".
网址是: http://htmlparser.sourceforge.net ,当前版本为1.5.
下载下来,试用一番,感觉不错,完全能满足lucene解析Html的需求.
过几天贴出lucene进行全文检索的代码.(检索本站的文章等).
试用代码如下,供大家参考:
package com.jscud.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; 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.util.NodeList; import org.htmlparser.util.ParserException; import org.htmlparser.visitors.HtmlPage; import org.htmlparser.visitors.TextExtractingVisitor; import com.jscud.util.LogMan; //一个日志记录类 /** * 演示了Html Parse的应用. * * @author scud http://www.jscud.com */ public class ParseHtmlTest { public static void main(String[] args) throws Exception { String aFile = "e:/jscud/temp/test.htm"; String content = readTextFile(aFile, "GBK"); test1(content); System.out.println("===================================="); test2(content); System.out.println("===================================="); test3(content); System.out.println("===================================="); test4(content); System.out.println("===================================="); test5(aFile); System.out.println("===================================="); //访问外部资源,相对慢 test5("http://www.jscud.com"); System.out.println("===================================="); } /** * 读取文件的方式来分析内容. * filePath也可以是一个Url. * * @param resource 文件/Url */ public static void test5(String resource) throws Exception { Parser myParser = new Parser(resource); //设置编码 myParser.setEncoding("GBK"); HtmlPage visitor = new HtmlPage(myParser); myParser.visitAllNodesWith(visitor); String textInPage = visitor.getTitle(); System.out.println(textInPage); } /** * 按页面方式处理.对一个标准的Html页面,推荐使用此种方式. */ public static void test4(String content) throws Exception { Parser myParser; myParser = Parser.createParser(content, "GBK"); HtmlPage visitor = new HtmlPage(myParser); myParser.visitAllNodesWith(visitor); String textInPage = visitor.getTitle(); System.out.println(textInPage); } /** * 利用Visitor模式解析html页面. * * 小优点:翻译了<>等符号 * 缺点:好多空格,无法提取link * */ public static void test3(String content) throws Exception { Parser myParser; myParser = Parser.createParser(content, "GBK"); TextExtractingVisitor visitor = new TextExtractingVisitor(); myParser.visitAllNodesWith(visitor); String textInPage = visitor.getExtractedText(); System.out.println(textInPage); } /** * 得到普通文本和链接的内容. * * 使用了过滤条件. */ public static void test2(String content) throws ParserException { Parser myParser; NodeList nodeList = null; myParser = Parser.createParser(content, "GBK"); NodeFilter textFilter = new NodeClassFilter(TextNode.class); NodeFilter linkFilter = new NodeClassFilter(LinkTag.class); //暂时不处理 meta //NodeFilter metaFilter = new NodeClassFilter(MetaTag.class); OrFilter lastFilter = new OrFilter(); lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter }); nodeList = myParser.parse(lastFilter); Node[] nodes = nodeList.toNodeArray(); for (int i = 0; i < nodes.length; i++) { Node anode = (Node) nodes[i]; String line = ""; if (anode instanceof TextNode) { TextNode textnode = (TextNode) anode; //line = textnode.toPlainTextString().trim(); line = textnode.getText(); } else if (anode instanceof LinkTag) { LinkTag linknode = (LinkTag) anode; line = linknode.getLink(); //@todo 过滤jsp标签:可以自己实现这个函数 //line = StringFunc.replace(line, "<%.*%>", ""); } if (isTrimEmpty(line)) continue; System.out.println(line); } } /** * 解析普通文本节点. * * @param content * @throws ParserException */ public static void test1(String content) throws ParserException { Parser myParser; Node[] nodes = null; myParser = Parser.createParser(content, null); nodes = myParser.extractAllNodesThatAre(TextNode.class); //exception could be thrown here for (int i = 0; i < nodes.length; i++) { TextNode textnode = (TextNode) nodes[i]; String line = textnode.toPlainTextString().trim(); if (line.equals("")) continue; System.out.println(line); } } /** * 读取一个文件到字符串里. * * @param sFileName 文件名 * @param sEncode String * @return 文件内容 */ public static String readTextFile(String sFileName, String sEncode) { StringBuffer sbStr = new StringBuffer(); try { File ff = new File(sFileName); InputStreamReader read = new InputStreamReader(new FileInputStream(ff), sEncode); BufferedReader ins = new BufferedReader(read); String dataLine = ""; while (null != (dataLine = ins.readLine())) { sbStr.append(dataLine); sbStr.append("/r/n"); } ins.close(); } catch (Exception e) { LogMan.error("read Text File Error", e); } return sbStr.toString(); } /** * 去掉左右空格后字符串是否为空 * @param astr String * @return boolean */ public static boolean isTrimEmpty(String astr) { if ((null == astr) || (astr.length() == 0)) { return true; } if (isBlank(astr.trim())) { return true; } return false; } /** * 字符串是否为空:null或者长度为0. * @param astr 源字符串. * @return boolean */ public static boolean isBlank(String astr) { if ((null == astr) || (astr.length() == 0)) { return true; } else { return false; } } }
- HtmlParser2.0.rar (300.8 KB)
- 下载次数: 3
发表评论
-
判断二叉树是否平衡及计算二叉树深度和结点个数
2012-09-01 10:12 7727参考:http://blog.csdn.net/zz19880 ... -
【转】java实现二叉查找树
2012-08-31 09:44 1544转自:http://blog.csdn.net/zyj817 ... -
二叉树及其遍历
2012-08-21 09:50 1564转自:http://www.iteye.com/t ... -
java栈中缀表达式转为后缀表达式
2012-07-19 11:33 2470思路: 遇到数字,则输出。 遇到操作符,入栈,在入栈前若该 ... -
java栈实现括号匹配
2012-07-19 09:48 4542算法思想: 做一个空栈,读入字符。 若字符是左运算符,则入 ... -
【转】java静态变量和实例变量的区别
2012-06-20 11:02 1341转自:http://www.2cto.com/kf/20100 ... -
【转】java中会存在内存泄漏吗,请简单描述。
2012-06-20 10:24 1388java中 ... -
【转】java匿名内部类2
2012-06-12 13:45 1265匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类? ... -
【转】java匿名内部类
2012-06-12 13:32 1446java匿名内部类 (2010-11 ... -
【转】JAVA中获取路径
2012-03-25 16:57 857转自:http://wenku.baidu.com/view/ ... -
【转】Map遍历
2012-03-25 16:56 943转自:http://wenku.baidu.com/view/ ... -
【转】java解析xml文件四种方式
2012-03-25 16:54 1401转自:http://wenku.baidu.com ... -
【转】JDOM解析处理xml
2012-03-25 16:52 1262转自http://qingbyqing.iteye.com/b ... -
【转】java随机排列数组
2012-02-20 18:58 2373转自:http://blog.csdn.net/liang ... -
设计模式——代理模式
2012-01-06 13:14 1270代理模式: 为其他对象提供一种代理以控制对这个对象的访问 ... -
设计模式——装饰模式
2012-01-05 15:58 1280首先介绍三个重要原则: 依赖倒转原则:高层模块不应该依赖于 ... -
设计模式——策略模式 & 单例模式
2011-12-29 16:26 1572策略模式: * 策略模式定义了算法家族,分别封装起来,让他 ... -
排序算法
2011-12-28 22:41 960参考:http://student.zjzk.cn/cours ... -
设计模式——简单工厂 VS 工厂方法
2011-12-28 15:07 1208简单工厂模式: 它最大优点在于工厂类中包含了必要的逻辑 ... -
String
2011-12-27 10:53 12711. String s = new String(" ...
相关推荐
赠送jar包:scala-parser-combinators_2.12-1.1.0.jar; 赠送原API文档:scala-parser-combinators_2.12-1.1.0-javadoc.jar; 赠送源代码:scala-parser-combinators_2.12-1.1.0-sources.jar; 赠送Maven依赖信息...
赠送jar包:scala-parser-combinators_2.11-1.0.4.jar; 赠送原API文档:scala-parser-combinators_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-parser-combinators_2.11-1.0.4-sources.jar; 赠送Maven依赖信息...
ua-parser-1.3.0
ua-parser-1.3.0.jar,现在maven中http://maven.twttr.com/ua_parser/ua-parser/1.3.0/ua-parser-1.3.0.pom下载不下来。
赠送jar包:scala-parser-combinators_2.11-1.0.4.jar; 赠送原API文档:scala-parser-combinators_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-parser-combinators_2.11-1.0.4-sources.jar; 包含翻译后的API...
- HTML解析:虽然DOMParser主要用于XML,但它也可以用来解析HTML字符串,这对于动态生成或修改网页内容非常有用。 7. **其他工具和库**: 在实际开发中,除了DOMParser,还有许多库和框架提供更高级的XML处理功能...
下载 ua-parser-master cd /app/ua-parser-master/java vi pom.xml <version>1.3.0</version> 原来是<version>1.3.1-SNAPSHOT mvn package -DskipTests mvn install:install-file -Dfile="/app/ua-parser-master/...
编译器设计之语法分析算法:Operator Precedence Parser
编译器设计之语法分析算法:Recursive Descent Parser
html-dom-parser 在服务器(Node.js)和客户端(浏览器)上均可使用HTML到DOM解析器: HTMLDOMParser(string[, options])解析器将HTML字符串转换为描述DOM树JavaScript对象。例子const parse = require ( '...
它不依赖于完整的HTML解析器,而是通过逐行扫描和识别HTML标签来工作,这使得它在处理不规范或部分HTML文档时具有较高的效率和容错性。然而,对于需要进行更复杂的查询操作,如基于CSS选择器或XPath表达式的选择,...
赠送jar包:scala-parser-combinators_2.12-1.1.0.jar; 赠送原API文档:scala-parser-combinators_2.12-1.1.0-javadoc.jar; 赠送源代码:scala-parser-combinators_2.12-1.1.0-sources.jar; 赠送Maven依赖信息...
HTML解析器是用于处理HTML(超文本标记语言)文档的工具,它能够解析HTML源代码并生成DOM(文档对象模型)结构,使程序能够方便地访问和操作网页内容。在IT行业中,HTML解析器广泛应用于网页抓取、数据挖掘、自动化...
Python中的`html5-parser`库是一个高效的HTML5解析器,它使用C语言编写,从而提供了比纯Python解析更快的速度。这个库是为了解决在处理大量HTML数据时,需要快速、准确地解析文档的需求。在Python开发中,尤其是在...
HTML解析器是编程领域中用于处理HTML(超文本标记语言)文档的工具,它能够读取HTML源代码并解析成可操作的数据结构。在给定的"html_parser.zip"压缩包中,我们可以推测包含了一个使用Delphi7或Delphi XE2编写的HTML...
JavaParser:访问 该项目包含上书籍的代码示例 标题 JavaParser:已访问 作者 尼古拉斯·史密斯(Nicholas Smith),丹尼·范·布鲁根(Danny van Bruggen)和费德里科·托马塞蒂(Federico Tomassetti) 前导文字 ...
《pull-parser-2.jar工具类:Android开发中的XML与JSON解析利器》 在移动应用开发领域,尤其是在Android平台上,高效地处理XML和JSON数据是必不可少的技能。`pull-parser-2.jar`工具类库就是这样一个专门针对XML和...
在IT领域,`logparser`是一个强大的命令行工具,用于解析和分析各种日志文件。它能够处理结构化和半结构化的文本日志数据,并从中提取有价值的信息。这个工具以其灵活性和功能强大而闻名,尤其对于系统管理员和网络...
标签"html_parser"、"parser_perl"、"perl_html"进一步明确了这个模块的核心功能,即它是一个用Perl编写的HTML解析器。 在压缩包内的文件列表中,"www.pudn.com.txt"可能是一个包含有关下载来源或使用模块时的额外...
5. **灵活性与扩展性**: html-dom-parser允许开发者自定义解析规则,比如设置默认的标签闭合方式、处理特定的HTML标签等。这增强了库的灵活性,满足了不同项目的需求。 6. **实际应用**: 在实际开发中,这个库常...