HtmlParser主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单,此处就将其忽略了。 Node分成三类:
这两天准备做一些网站编程的工作,于是对HtmlParse小研究了一下,目的是快速入手,而不是深入研究,做了一下整理,和大家共同讨论一下。
实际上NodeVisitor里边这四种visit方法都是空的,因为在不同的Visitor中对于这三类节点的处理是不同的;对于需要处理的节点,只要重载对应的visit方法就行了,如果不处理那就不理会就可以了;另外,如果用户用自己的Visitor,那么还可以灵活的处理不同类型的节点了。
详细解决方案
HtmlParser初始研究
热度:230 发布时间:2012-10-16 09:57:37.0
HtmlParser初步研究
by?lostfire?
转自:http://www.blogjava.net/lostfire/archive/2006/07/02/56212.html
?
一,数据组织分析:
?
二,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来过滤节点,提取出我们所关注的节点,再对节点进行处理。通过这样的组合,一定能够找出我们所需要的信息。
?
参考:
http://htmlparser.sourceforge.net/
http://www.blogjava.net/rocky/archive/2005/12/21/24997.aspx
http://www.westing.cn/xblog/?p=90
相关解决方案
- python模块引见- HTMLParser 简单的HTML和XHTML解析器
- 利用python脚本抓取AC的代码[爬虫+HTMLParser+handle_entityref+正则表达式+模拟登陆+资料操作]
- [转][htmlparser]htmlparser应用例子(全)
- 应用 HttpClient 和 HtmlParser 实现简易爬虫
- htmlparser 除了html标签体(获取body,title纯文本)
- HtmlParser 解析搜寻页面
- 运用 HttpClient 和 HtmlParser 实现简易爬虫
- [转]org.htmlparser.util.ParserException: Error in opening a connection to *
- Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式)
- 应用 HttpClient 和 HtmlParser 实现简易爬
- HTMLParser
- htmlparser 获取页面婚配链接
- org.htmlparser.util.EncodingChangeException: character
- htmlparser 抓不到网页的内容。该如何解决
- org.htmlparser.util.ParserException: reset stream failed
- 哪位高手知道org.htmlparser.StringNode在哪个版本的jar包
- 【HtmlParser】提取网页的meta信息解决方法
- 使用ASIHTTPRequest 编译提示找不到libxml/HTMLparser.h的解决方法
- org.htmlparser.util.ParserException: Error in opening a connection to ***
- coursera-dl 报错 AttributeError (‘HTMLParser’ object has no attribute ‘unescape’)