- 浏览: 1489115 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
HTMLParser的两种使用方法
因为论文的关系,要 用到HTMLParser这个项目(使用的HTMLParser版本是1.6) 一,数据组织分析:
HtmlParser主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单, 此处就将其忽略了。
Node分成三类:
二,Visitor方式访问Html:
1,整体解析过程
2,Visit过程
3,获取节点的过程:逐步遍历Html,分析出Node。此部分较为复杂,且对于我们应用来说无需很多
了解,暂跳过。
4,节点访问
节点访问采用Visitor模式,Node的accept方法和具体Visitor的visit方法是
关键。
首先三类Node来accept的方式各不相同:
系统为我们实现了下面我要介绍的8种Visitor,实际上可以看作是系统给我们演示了如何做各种各样
的Visitor来访问Html,因为实际上我们要真正来用HtmlParser的话,还需要特定的Visitor,而通过简单的这
些系统提供的Visitor组合是难以做成什么事情的。
三,系统Visitor功能简介:
四,Filter
如果说visitor是遍历提取信息,当然这个信息可以包括某些节点或者从节点分析出来的更有效的信息,这都取决
于我们的Visitor做成什么样子,那么Filter则目标很明确,就是用来提取节点的。所以说要想用HtmlParser,首先要熟悉上面讲到的数据
组织。
系统定义了17种具体的Filter,包括依据节点父子关系的Filter,连接Filter组合的
Filter,依据网页内容匹配情况的filter,等等。我们也可以implement Filter来做自己的Filter来提取节点。
Filter的调用是同Visitor独立的,因为也无需先filter出一些NodeList,再用
Visitor来访问。调用Filter的方法是:
NodeList nodeList = myParser.parse(someFilter);
解析之后,我们可以采用:
Node[] nodes = nodeList.toNodeArray();
来获取节点数组,也可以直接访问:
Node node = nodeList.elementAt(i)来获取Node。
另外,在Filter后得到NodeList以后,我们仍然可以使用NodeList的
extractAllNodesThatMatch(someFilter)来进一步过滤,同时又可以用NodeList的
isitAllNodesWith(someVisitor)来做进一步的访问。
这样,我们可以看到HtmlParser为我们提供了非常方便的Html解析方式,针对不同的应用可以采用
visitor来遍历Html节点提取数据,也可以用Filter来过滤节点,提取出我们所关注的节点,再对节点进行处理。通过这样的组合,一定能够找出
我们所需要的信息。
我的代码
package
com.eric.Html.htmlparser;
import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.AndFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.HasChildFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; import org.htmlparser.visitors.TextExtractingVisitor; /** */ /** * @author 作者 Eric yang E-mail:yjboy1982@126.com * @version 创建时间:2007-7-16 下午02:49:55 * 类说明 */ public class AstroExtractorTest ... { /** */ /** * @param args * @throws ParserException */ public static void main(String[] args) throws ParserException ... { // TODO Auto-generated method stub String title ; String constellation ; String body ; String summary ; Parser parser = new Parser( " http://astro.sina.com.cn/sagittarius.html " ); parser.setEncoding( " GB2312 " ) ; NodeFilter filter_constellation_summart = new AndFilter(( new TagNameFilter( " td " )),( new HasChildFilter( new TagNameFilter( " b " )))) ; NodeFilter filter_title = new AndFilter( new TagNameFilter( " font " ), new HasAttributeFilter( " class " , " f1491 " )) ; NodeFilter filter_body = new AndFilter( new TagNameFilter( " td " ), new HasAttributeFilter( " width " , " 30% " )) ; NodeList nodelist = parser.parse(filter_constellation_summart) ; Node node_constellation = nodelist.elementAt( 0 ) ; constellation = node_constellation.getFirstChild().getNextSibling().toHtml() ; Node node_summary = nodelist.elementAt( 1 ) ; NodeList summary_nodelist = node_summary.getChildren() ; summary = summary_nodelist.elementAt( 3 ).toHtml() + summary_nodelist.elementAt( 5 ).toHtml() ; parser.reset() ; nodelist = parser.parse(filter_title) ; Node node_title = nodelist.elementAt( 0 ) ; title = node_title.getNextSibling().getNextSibling().toHtml() ; // title = node_title.getNextSibling().getNextSibling().toHtml() ; parser.reset() ; nodelist = parser.parse(filter_body) ; Node node_body = nodelist.elementAt( 0 ) ; Parser body_parser = new Parser(node_body.toHtml()) ; TextExtractingVisitor visitor = new TextExtractingVisitor() ; body_parser.visitAllNodesWith(visitor) ; body = visitor.getExtractedText() ; // System.out.println(node_summary.getChildren().toHtml()) ; // System.out.println(node_body.toHtml()) ; // System.out.println(title.trim()) ; // System.out.println(constellation.trim()) ; // System.out.println(body.trim()) ; System.out.println(summary.trim()) ; } } |
发表评论
-
htmlunit 示例
2010-08-20 18:40 4310先下载依赖的相关JAR包:http://sourcefor ... -
HtmlCleanner结合xpath用法
2010-04-15 13:24 3522文章分类:Java编程 ... -
基于Htmlparser的天气预报程序(续)
2010-04-14 13:53 1066zz:http://www.iteye.com/topic/6 ... -
httpclient(校内网)
2010-04-13 15:10 1271Java code <!-- C ... -
httpclient(校内网)
2010-04-13 15:10 1396httpclient(校内网),大家帮忙看看我的 http ... -
HTTPClient模拟登陆人人网
2010-04-13 14:58 1874zz: 目的: http://www.iteye. ... -
HtmlCleaner API
2010-04-13 13:40 4455HtmlCleaner API Create cleaner ... -
htmlcleaner惯用法
2010-04-13 13:39 1422Common usage Tipically the f ... -
htmlcleaner惯用法
2010-04-13 13:39 1498Common usage Tipically t ... -
htmlcleaner 使用示例.
2010-04-13 13:10 10004原文出处:http://blog.chenlb.com/200 ... -
http://htmlparser.com.cn/
2010-04-12 16:20 1030http://htmlparser.com.cn/ ... -
开源网络蜘蛛spider(转载)
2010-04-12 15:42 1308spider是搜索引擎的必须 ... -
基于Spindle的增强HTTP Spider
2010-04-12 15:33 1455zz:http://www.iteye.com/news ... -
Cobra: Java HTML 解析器
2010-04-12 15:32 2913Cobra 简介: Cobra是一个 ... -
用htmlparser分析并抽取正文
2010-04-12 15:26 1537我这次要介绍的是如何抽取正文,这部分是最为核心的.因为如果不能 ... -
HtmlParser初步研究
2010-04-12 15:18 906目的是快速入手,而不 ... -
基于Htmlparser的天气预报程序
2010-04-12 15:16 1055htmlparser是一个纯的java写的html解析的库,它 ...
相关推荐
该文档介绍了两种用C#来实现HtmlParser、对网页进行解析的方法,对于初学者有着很大帮助。
里面包含了HtmParser, Httpclient两个工具,一个用来获取网络页面,一个用来解析,配合使用,功能强大,里面还有HtmlParser 的帮助文档(格式有html和chm两种)欢迎大家前来下载使用,如果问题请联系我。
代码采用Python3编写。 运行 python3 parser.py 学习建议 本解析器当前分两次提交,第一次是主框架,第二次...支持TextNode和ElementNode两种DOM结构 属性解析 自闭和标签 通过dfs实现层级缩进,方便调试 快来了...
1.4使用方法与步骤 开发环境:需要 使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。 1.创建HttpClient对象。 HttpClient client = new HttpClient(); 2.创建请求方法的实例,并指定请求URL。如果...
1.3.3 为什么有3种类型的引号 7 1.3.4 使用print()函数 7 1.3.5 理解不同的引号 8 1.4 串联两个字符串 10 1.5 用不同的方法串联字符串 11 1.6 本章小结 12 1.7 习题 13 第2章 数值与运算符 15 2.1 不同类型的数值 15...
每个镜头的非边界过渡区的第一帧确定为关键帧 【找镜头边界:基于帧差的镜头边界检测方法、基于模型的镜头边界检测方法、基于学习的镜头边界检测方法】 使用非极大值抑制法确定镜头边界系数极大值并排序,以实现基于...
快速HTML解析器是一种非常快速的HTML解析器。 它将生成简化的DOM树,并具有基本元素查询支持。 根据设计,它打算以最低的价格解析大量HTML文件,因此性能是重中之重。 因此,某些格式错误HTML可能无法正确解析,但...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...
parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...