大数据处理之道 (htmlparser获取数据<一>)
2017-05-18 14:31
393 查看
一:简单介绍
(1)HTML Parser是一个用于解析Html的Java的库。可採用线性或嵌套两种方式。主要用于网页的转换或提取,他有一些特性:过滤器filter,遍历器visitors,通常的标签tagName和易用的JavaBeans。
它是一个高速,健壮,并严格測试过的组件。
(2)个人理解:HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。各个节点代表HTML中的标签和属性值,很类似于XML解析器解析后的结果,也类似与html dom的结构。HTMLParser訪问结果内容的方法有两种:使用Filter和使用Visitor,一般Filter用的多一些,用于提取特定的网页信息。
(3))]官方API说明 (须要Google的)
二:主要函数功能说明:
(1)HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完毕了对于HTML页面的分析工作。这个类有以下几个构造函数:
public Parser ();
public Parser (Lexer lexer, ParserFeedback fb);
public Parser (URLConnection connection, ParserFeedback fb) throws ParserException;
public Parser (String resource, ParserFeedback feedback) throws ParserException;
public Parser (String resource) throws ParserException;
public Parser (Lexer lexer);
public Parser (URLConnection connection) throws ParserException;
和一个静态类 public static Parser createParser (String html, String charset);
(2)HTMLParser将解析过的信息保存为一个树的结构。Node是信息保存的数据类型基础。
请看Node的定义:
public interface Node extends Cloneable;
Node中包括的方法有几类:
对于树型结构进行遍历的函数,这些函数最easy理解:
Node getParent ():取得父节点
NodeList getChildren ():取得子节点的列表
Node getFirstChild ():取得第一个子节点
Node getLastChild ():取得最后一个子节点
Node getPreviousSibling ():取得前一个兄弟(不好意思,英文是兄弟姐妹。直译太麻烦并且不符合习惯,对不起女同胞了)
Node getNextSibling ():取得下一个兄弟节点
取得Node内容的函数:
String getText ():取得文本
String toPlainTextString():取得纯文本信息。
String toHtml () :取得HTML信息(原始HTML)
String toHtml (boolean verbatim):取得HTML信息(原始HTML)
String toString ():取得字符串信息(原始HTML)
Page getPage ():取得这个Node相应的Page对象
int getStartPosition ():取得这个Node在HTML页面中的起始位置
int getEndPosition ():取得这个Node在HTML页面中的结束位置
(3)其他函数:
void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
用于Visitor遍历的函数:
void accept (NodeVisitor visitor):对这个Node应用visitor
用于改动内容的函数。这类用得比較少:
void setPage (Page page):设置这个Node相应的Page对象
void setText (String text):设置文本
void setChildren (NodeList children):设置子节点列表
(4)用于Filter过滤的函数
顾名思义。Filter就是对于结果进行过滤,取得须要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也能够分为几类。
推断类Filter:
TagNameFilter ----- html标签指定指定过滤器
HasAttributeFilter ------ 属性和属性值指定过滤器
HasChildFilter
HasParentFilter
HasSiblingFilter
IsEqualFilter
逻辑运算Filter:
AndFilter ------ 同一时候满足两个或多个过滤条件的过滤器
NotFilter ------ 非
OrFilter ------- 或
XorFilter
其它Filter:
NodeClassFilter
StringFilter ------- 过滤敏感信息的过滤器
LinkStringFilter --------- 过滤敏感链接信息的过滤器
LinkRegexFilter
RegexFilter
CssSelectorNodeFilter
全部的Filter类都实现了org.htmlparser.NodeFilter接口。
这个接口仅仅有一个主要函数:
boolean accept (Node node);
各个子类分别实现这个函数。用于推断输入的Node是否符合这个Filter的过滤条件,假设符合。返回true。否则返回false。
三:html结构解析图示说明
(1)html代码
(2)html的dom结构(即parser后的解析树形结构)
(3)说明
由结构图中我们能够看到。整个文档就是一个文档节点。
而每个HMTL标签都是一个元素节点。
标签中的文字则是文字节点。
标签的属性是属性节点。
一切都是节点……
总之,节点树的概念从图中一目了然。最上面的就是“树根”了。节点之间有父子关系。祖先与子孙关系。兄妹关系。这些关系从图中也非常好看出来,直接连线的就是父子关系了。
而有一个父亲的就是兄妹关系……很多其它dom详见W3C
(1)HTML Parser是一个用于解析Html的Java的库。可採用线性或嵌套两种方式。主要用于网页的转换或提取,他有一些特性:过滤器filter,遍历器visitors,通常的标签tagName和易用的JavaBeans。
它是一个高速,健壮,并严格測试过的组件。
(2)个人理解:HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果。各个节点代表HTML中的标签和属性值,很类似于XML解析器解析后的结果,也类似与html dom的结构。HTMLParser訪问结果内容的方法有两种:使用Filter和使用Visitor,一般Filter用的多一些,用于提取特定的网页信息。
(3))]官方API说明 (须要Google的)
二:主要函数功能说明:
(1)HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完毕了对于HTML页面的分析工作。这个类有以下几个构造函数:
public Parser ();
public Parser (Lexer lexer, ParserFeedback fb);
public Parser (URLConnection connection, ParserFeedback fb) throws ParserException;
public Parser (String resource, ParserFeedback feedback) throws ParserException;
public Parser (String resource) throws ParserException;
public Parser (Lexer lexer);
public Parser (URLConnection connection) throws ParserException;
和一个静态类 public static Parser createParser (String html, String charset);
(2)HTMLParser将解析过的信息保存为一个树的结构。Node是信息保存的数据类型基础。
请看Node的定义:
public interface Node extends Cloneable;
Node中包括的方法有几类:
对于树型结构进行遍历的函数,这些函数最easy理解:
Node getParent ():取得父节点
NodeList getChildren ():取得子节点的列表
Node getFirstChild ():取得第一个子节点
Node getLastChild ():取得最后一个子节点
Node getPreviousSibling ():取得前一个兄弟(不好意思,英文是兄弟姐妹。直译太麻烦并且不符合习惯,对不起女同胞了)
Node getNextSibling ():取得下一个兄弟节点
取得Node内容的函数:
String getText ():取得文本
String toPlainTextString():取得纯文本信息。
String toHtml () :取得HTML信息(原始HTML)
String toHtml (boolean verbatim):取得HTML信息(原始HTML)
String toString ():取得字符串信息(原始HTML)
Page getPage ():取得这个Node相应的Page对象
int getStartPosition ():取得这个Node在HTML页面中的起始位置
int getEndPosition ():取得这个Node在HTML页面中的结束位置
(3)其他函数:
void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
用于Visitor遍历的函数:
void accept (NodeVisitor visitor):对这个Node应用visitor
用于改动内容的函数。这类用得比較少:
void setPage (Page page):设置这个Node相应的Page对象
void setText (String text):设置文本
void setChildren (NodeList children):设置子节点列表
(4)用于Filter过滤的函数
顾名思义。Filter就是对于结果进行过滤,取得须要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也能够分为几类。
推断类Filter:
TagNameFilter ----- html标签指定指定过滤器
HasAttributeFilter ------ 属性和属性值指定过滤器
HasChildFilter
HasParentFilter
HasSiblingFilter
IsEqualFilter
逻辑运算Filter:
AndFilter ------ 同一时候满足两个或多个过滤条件的过滤器
NotFilter ------ 非
OrFilter ------- 或
XorFilter
其它Filter:
NodeClassFilter
StringFilter ------- 过滤敏感信息的过滤器
LinkStringFilter --------- 过滤敏感链接信息的过滤器
LinkRegexFilter
RegexFilter
CssSelectorNodeFilter
全部的Filter类都实现了org.htmlparser.NodeFilter接口。
这个接口仅仅有一个主要函数:
boolean accept (Node node);
各个子类分别实现这个函数。用于推断输入的Node是否符合这个Filter的过滤条件,假设符合。返回true。否则返回false。
三:html结构解析图示说明
(1)html代码
<html> <head> <title>HTML DOM</title> </head> <body> <h1>DOM的结构</h1> <p><a href="href">链接</a></p> </body> </html>
(2)html的dom结构(即parser后的解析树形结构)
(3)说明
由结构图中我们能够看到。整个文档就是一个文档节点。
而每个HMTL标签都是一个元素节点。
标签中的文字则是文字节点。
标签的属性是属性节点。
一切都是节点……
总之,节点树的概念从图中一目了然。最上面的就是“树根”了。节点之间有父子关系。祖先与子孙关系。兄妹关系。这些关系从图中也非常好看出来,直接连线的就是父子关系了。
而有一个父亲的就是兄妹关系……很多其它dom详见W3C
相关文章推荐
- 大数据处理之道 (htmlparser获取数据<一>)
- 大数据处理之道(实验方法篇<一>)
- 大数据处理之道 (htmlparser 过滤器<二>)
- GPS数据处理---< 一 >---数据格式
- asp.net<Web版> ---将excel表数据导入到数据库问题<一>---未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序
- 关于从后台获取数据List<User>转化为JSON格式在前台用easyui以表格显示
- DSOFramer控件文档上传到服务器处理页面后,怎么解析数据 <转>
- Android 4.2 Input Event事件处理流程<一>事情派发
- ios 处理内存警告<一>
- Android 4.2 Input Event事件处理流程<一>---inputManager启动
- JSONP一种使用<script>元素获取数据的方法
- GPS数据处理---< 二 >---数据处理
- JSP EL表达式<c:forEach> 页面获取hibernate联级对象数据
- oracle的使用<一>支持的数据类型
- java反射机制初步认识<一>获取成员变量
- 如何回滚请求<复制系统初始的数据>所处理的数据
- Solr 数据导入 <一>DIH简单使用
- 大数据处理之道(实验方法<二>)
- JavaScript导出table数据到Excel<一>
- <s:iterator>使用status获取当前遍历数据的行数、序号等操作