- 浏览: 914694 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
这两天准备做一些网站编程的工作,于是对HtmlParse小研究了一下,目的是快速入手,而不是深入研究,做了一下整理,和大家共同讨论一下。
一,数据组织分析:
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来过滤节点,提取出我们所关注的节点,再对节点进行处理。通过这样的组合,一定能够找出我们所需要的信息。
发表评论
-
iPhone5s插件推荐 越狱后必装的50个插件
2014-12-31 16:58 15651. Activator (没有之一的强大手势操作软件)2. ... -
JS automation 环境迁移备注
2014-11-15 11:17 0此次迁移涉及的问题记录如下: 1) Jenkins 直接把 ... -
MacOS 怎么写NFS移动硬盘
2014-11-14 19:13 26981、打开命令行终端。 2、插上移动硬盘,这时候你在Find ... -
How can I resize a partition with Disk Utility (Bottom-up)
2014-10-10 14:30 478Create a new volume in the bla ... -
Outlook 邮件提醒长期显示
2012-08-30 10:38 1357I thought it was one of th ... -
chrome 背景色的设置
2012-07-17 09:56 3023最近换了浏览器,开始喜欢上chrome。 为了保护眼睛 ... -
日常生活中练习右脑
2012-07-12 10:16 1261成年人在日常琐细的生活中,同样可以采取各种方法锻炼右脑。 ... -
大公司面试集锦
2012-06-18 10:23 1368微软十五道面试题 1、有一个整数数组,请求出两两之差绝对值最 ... -
商务英语中的委婉表达
2012-06-18 10:19 12601. 委婉: 1) 动词:think、hope、re ... -
放松颈椎的几个动作
2012-05-29 12:41 1190随时放松颈部肌肉 ... -
drupal简单的体验
2012-05-24 15:41 875第一步: 到 drupal.org下下载最新的Drupal ... -
使用HtmlParser提取HTML文本块
2012-05-23 13:46 1462听人介绍说HtmlParser(Java版本)在网页预处理 ... -
[zz] Opencms vs Magnolia
2012-05-22 10:35 2010最近一直在挑选CMS,Opencms和Magnolia是考察的 ... -
面向对象的三个基本特征
2012-04-25 14:56 821面向对象的三个基本特征是:封装、继承、多态。 ... -
Maven vs Ant
2012-04-23 14:35 1194Ant 将提供了很多可以重用的task,例如 copy, mo ... -
zz智力题
2012-03-26 22:50 12691、有两根不均匀分布 ... -
几种开源Portal的简单介绍分析
2012-02-21 22:42 2452主要包括:Pluto,Liferay,eXo,Jetsp ... -
Portal top ten
2012-02-21 22:37 994TOP1 独立网店系统 Sh ... -
英文面试须知
2012-02-16 15:11 980英语面试需要好好准备 ... -
交易中间件与xa规范
2012-01-06 15:56 874xa是x/open dtp定义的交 ...
相关推荐
在网页分析中,HTMLParser扮演着核心角色,它能够帮助开发者有效地处理HTML源代码,提取所需的信息,甚至进行DOM(Document Object Model)操作。以下是对HTMLParser及其相关知识点的详细说明: 1. HTML解析:...
这些组件可以帮助开发者更好地实现从网络获取HTML内容,然后用HTMLParser进行解析。 总之,`c#版htmlparser htmlparser.dll htmlparser源代码`提供了一个C#实现的HTML解析工具,可以帮助开发者高效地处理HTML文档,...
2. **WebParser**:可能是一个简单的网页抓取器,利用HtmlParser解析网页,提取所需信息,例如新闻标题、链接等。 开发者可以打开`AnalyzeHtml.sln`,编译并运行这两个项目,以了解HtmlParser的具体使用方法和实际...
这个库可能被用于从网页中提取数据,比如在爬虫项目中,或者进行自动化测试时解析页面内容。本篇文章将深入探讨HTMLParser的工作原理、如何使用以及一些常见应用场景。 1. **HTMLParser库介绍** HTMLParser是...
HTML解析器的工作原理是对HTML源码进行分析,识别出标签、属性、文本等内容。Winista.HtmlParser可能采用了基于DOM(文档对象模型)或SAX(简单API for XML)的解析策略。DOM解析会构建一个完整的HTML结构树,而SAX...
- **DOM树构建**:HTMLParser可以构建一个DOM树表示HTML文档,方便进行结构化查询和操作。 - **错误处理**:在遇到不规范的HTML时,HTMLParser有较好的容错性,能够尽可能地解析出正确的结构。 使用HTMLParser的...
1. **解析HTML的基本原理** HtmlParser采用了事件驱动的解析模式。在解析过程中,遇到HTML元素、属性、文本等时,会触发相应的事件,用户可以通过注册事件处理器来对这些事件进行处理。这种设计使得开发者能够灵活...
源码的提供使得我们可以深入理解其工作原理,并根据实际需求进行定制化修改。 在C#中处理HTML文档通常涉及到以下几个关键知识点: 1. **HTML解析器**:HTMLParser 库的核心就是解析器,它能够读取HTML文本并将其...
HTMLparser的工作原理通常包括以下步骤: 1. 解析HTML文档:HTMLparser首先读取HTML源代码,并按照HTML的语法规则进行解析。 2. 构建DOM树:解析过程中,HTMLparser会构建一个文档对象模型(DOM)树,将HTML元素以树...
总之,HTMLParser是网页解析过程中的关键组件,理解和掌握其工作原理对于提升前端开发技能和优化网页性能具有重要意义。通过学习和实践,我们可以更好地应对HTML解析带来的挑战,从而创造出更加高效、易用的网页应用...
1. 网页数据抓取:创建一个简单的爬虫,使用Winista.HTMLParser解析目标网页,然后通过CSS选择器提取特定内容,例如新闻标题、发布时间等。 2. 存储与检索:爬取的大量网页数据可以被压缩存储,当需要时,通过...
对于开发者来说,这是一个宝贵的资源,因为可以直接查看和研究库的内部工作原理,了解具体实现细节,甚至可以根据需求进行定制修改。源代码还方便了进行调试和性能优化,对深入理解库的运行机制大有裨益。 最后,`...
2. **解析过程**:HTMLParser的工作原理通常包括两个主要步骤:词法分析和语法分析。词法分析将HTML源代码拆分为一系列的令牌(tokens),如标签、属性、文本等。语法分析则根据HTML语法规则将这些令牌构建为DOM...
这个库使得开发者能够方便地处理HTML内容,提取所需的数据,或者对HTML进行结构化的分析。HTMLParser提供了灵活且高效的API,能够处理各种复杂的HTML结构,即使在面对不规则或不标准的HTML代码时也能有良好的表现。 ...
HtmlParser.Net 1.8.0的源代码包含了许多关键组件,比如解析器类、事件处理器接口以及相关的辅助类。开发者可以通过阅读源代码了解其内部工作原理,甚至可以自定义解析行为以适应特定的需求。例如,你可以通过继承或...
通过这个适配器,开发者可以在享受parse5的规范解析和htmlparser2的灵活性之间进行切换,根据项目需求选择合适的处理方式。 在实际应用中,这个适配器可能用于以下场景: 1. 将不规则的HTML源码转化为标准的AST,...
在网络爬虫项目中,HTMLParser常常与HTTP客户端库(如Apache HttpClient或OkHttp)结合使用,先发送请求获取HTML内容,然后利用HTMLParser解析网页,提取需要的数据,如文章标题、内容、链接等。此外,它还可以与...
HTMLParser是一个用于解析HTML文档的库,它在编程领域中扮演着重要的角色,尤其是在处理网页内容和数据抓取时。...了解其工作原理和使用技巧,对于进行网页爬虫、数据分析或Web应用开发等任务具有重要意义。
而"需要使用的lib"则表明除了HTMLParser之外,可能还需要其他库,比如`urllib`或`requests`用于发送HTTP请求,`re`进行正则表达式匹配,甚至`pandas`用于数据清洗和分析。 总结来说,"htmlparser抓取网页内容"项目...