- 浏览: 1489134 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单,此处就将其忽略
了。
Node是形成树结构表示HTML的基础,所有的数据表示都是接口Node的实现,Node定义了与页面树结构所表达的页面Page对象,定义了
获取父、子、兄弟节点的方法,定义了节点到对应html文本的方法,定义了该节点对应的起止位置,定义了过滤方法,定义了Visitor访问机制。
AbstractNode是Node的一种具体的类实现,起到构成树形结构的作用,除了同具体Node相关的accetp方
法,toString,toHtml,toPlainTextString方法以外,AbstractNode实现了大多基本的方法,使得它的子类,不用
理会具体的树操作。
Tag是具体分析的主要内容。Tag分成composite的Tag和不能包含其他Tag的简单Tag两类,其中前者的基类是
CompositeTag,其子类包含BodyTag,Div,FrameSetTag,OptionTag,等27个子类;而简单Tag有
BaseHrefTag、
DoctypeTag,FrameTag,ImageTag,InputTag,JspTag,MetaTag,ProcessingInstructionTag
这八类。
Node分成三类:
RemarkNode:代表Html中的注释
TagNode:标签节点,是种类最多的节点类型,上述Tag的具体节点类都是TagNode的实现。
TextNode:文本节点
二,Visitor方式访问Html:
1,整体解析过程
用一个URL或页面String做一个Parser
用这个Parser做一个Visitor
使用Parser.visitAllNodeWith(Visitor)来遍历节点
获取Visitor遍历后得到的数据
2,Visit过程
做解析之前做的事情:visitor.beginParsing();
每次取到一个节点Node,让该Node接受accept该Visitor
做解析后做的事情:visitor.finishedParsing();
3,获取节点的过程:逐步遍历Html,分析出Node。此部分较为复杂,且对于我们应用来说无需很多了解,暂跳过。
4,节点访问
节点访问采用Visitor模式,Node的accept方法和具体Visitor的visit方法是关键。
首先三类Node来accept的方式各不相同:
对于所有TagNode都使用一个accept方法,即TagNode的accept方法。首先判断是否是标签结尾,如果是就
visitor.visitEndTag (this);否则visitor.visitTag (this);
如果是TextNode,那就visitor.visitStringNode (this);就可以了。
如果是RemarkNode,那就visitor.visitRemarkNode (this);就可以了。
实际上NodeVisitor里边这四种visit方法都是空的,因为在不同的Visitor中对于这三类节点的处理是不同的;对于需要处理的节
点,只要重载对应的visit方法就行了,如果不处理那就不理会就可以了;另外,如果用户用自己的Visitor,那么还可以灵活的处理不同类型的节点
了。
系统为我们实现了下面我要介绍的8种Visitor,实际上可以看作是系统给我们演示了如何做各种各样的Visitor来访问Html,因为实际
上我们要真正来用HtmlParser的话,还需要特定的Visitor,而通过简单的这些系统提供的Visitor组合是难以做成什么事情的。
三,系统Visitor功能简介:
ObjectFindingVisitor:用来找出所有指定类型的节点,采用getTags()来获取结果。
StringBean:用来从一个指定的URL获取移除了<SCRIPT></SCRIPT>
和<PRE></PRE>之间代码的Html代码,也可以用做Visitor,用来移除这两种标签内部的代码,采用
StringBean.getStrings()来获取结果。
HtmlPage:提取Title,body中的节点和页面中的TableTag节点。
LinkFindingVisitor:找出节点中包含某个链接的总个数。
StringFindingVisitor:找出遍历的TextNode中含有指定字符串的个数。
TagFindingVisitor:找出指定Tag的所有节点,可以指定多种类型。
TextExtractingVisitor:从网页中把所有标签去掉来提取文本,这个提取文本的Visitor有时是很实用的,只是注意在提取
文本时将标签的属性也去掉了,也就是说只剩下标签之间的文本,例如<a>中的链接也去掉了。
UrlModifyingVisitor:用来修改网页中的链接。
四,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
发表评论
-
htmlunit 示例
2010-08-20 18:40 4310先下载依赖的相关JAR包:http://sourcefor ... -
HTMLParser的两种使用方法
2010-04-15 16:37 5373HTMLParser的两种使用方法 ... -
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:16 1055htmlparser是一个纯的java写的html解析的库,它 ...
相关推荐
网络编程辅助工具20160720(HTTP工具增加提示信息+HtmlParser初步完成+第三方小白的SocketCapture加入).rar
META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....
c#版htmlparser htmlparser.dll htmlparser源代码
HTMLParser提取网页超链接研究 HTMLParser提取网页超链接研究
htmlparser网络爬虫技术,通过关键字查询快速查找指定网站
HTMLParser.net源代码HTMLParser.net使用demo
htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载
htmlparser.jar htmlparser教程
htmlparser2.0 htmlparser
HtmlParser源码及demo
HTMLParser HTML解析 HTMLParser HTML解析 HTMLParser HTML解析
我注意好多人都说没有org.htmlparser.Node和其他的一些.class文件,这里把下载后解压出来的5个jar包全部导入工程就可以引入所需的文件了
Winista.Htmlparser.net 源代码 本资料共包含以下附件: HtmlParser c#源码+demo.rar
关于用java写的htmlparser网页分析
Winista HtmlParser Winista HtmlParser Winista HtmlParser Winista HtmlParser
HtmlParser-2.0 API ,chm格式,方便使用
HTMLParser的Jar文件有如下几种: htmlparser.jar filterbuilder.jar htmllexer.jar sitecapturer.jar thumbelina.jar
JAVA htmlparser 使用实例