一:简单介绍

(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获取数据&lt;一&gt;)的更多相关文章

  1. 大数据处理之道(十分钟学会Python)

    一:python 简介 (1)Python的由来 Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个 ...

  2. 大数据处理之道(实验方法&lt;二&gt;)

    一:交叉验证(crossvalidation)(附实验的三种方法)方法简单介绍   (1) 定义:交叉验证(Cross-validation)主要用于建模应用中,比如PCR(Principal Com ...

  3. Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转

    问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...

  4. 第五章 大数据平台与技术 第12讲 大数据处理平台Spark

    Spark支持多种的编程语言 对比scala和Java编程上节课的计数程序.相比之下,scala简洁明了. Hadoop的IO开销大导致了延迟高,也就是说任务和任务之间涉及到I/O操作.前一个任务完成 ...

  5. MySQL随机获取数据的方法,支持大数据量

    最近做项目,需要做一个从mysql数据库中随机取几条数据出来. 总所周知,order by rand 会死人的..因为本人对大数据量方面的只是了解的很少,无解,去找百度老师..搜索结果千篇一律.特发到 ...

  6. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  7. 【MySQL】随机获取数据的方法,支持大数据量

    在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的.下面我来介绍随机取数据一些优化方法 ...

  8. 【大数据】大数据处理-Lambda架构-Kappa架构

    大数据处理-Lambda架构-Kappa架构 elasticsearch-head Elasticsearch-sql client NLPchina/elasticsearch-sql: Use S ...

  9. 互联网大规模数据分析技术(自主模式)第五章 大数据平台与技术 第10讲 大数据处理平台Hadoop

    大规模的数据计算对于数据挖掘领域当中的作用.两大主要挑战:第一.如何实现分布式的计算 第二.分布式并行编程.Hadoop平台以及Map-reduce的编程方式解决了上面的几个问题.这是谷歌的一个最基本 ...

随机推荐

  1. jQuery闪烁提示,让新消息在网页标题显示

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head& ...

  2. JavaScript 高级技巧 Memoization

    memoization 来源于拉丁语 memorandum ("to be remembered"),不要与 memorization 混淆了. 首先来看一下维基百科的描述: In ...

  3. 微信小程序request请求动态获取数据

    微信小程序开发文档链接 1 后台代码: clickButton:function(){ var that = this; wx.request({ url: 'http://localhost:909 ...

  4. 「问题思考」python的递归中return返回none

    代码: #求最大公约数 def gcd(x,y): if x < y: swap = x x = y y = swap if x%y == 0: return y else: gcd(y,x%y ...

  5. 杭电 1596 find the safest road (最小路径变形求最大安全度)

    Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条从u 到 v 的 ...

  6. POJ 1655 Balancing Act (树形DP求树的重心)

    题意: 求一棵树中以某个点为重心最小的子树集, 就是去掉这个点, 图中节点最多的联通块节点最少. 分析: 想知道这个点是不是最优的点, 只要比较它子树的数量和除去这部分其他的数量(它的父节点那部分树) ...

  7. 方便三菱PLC模块调用的FB功能块分享

    前言: 为方便 三菱 PLC 编程,可以将很多功能做成 FB 功能块的形式进行直接调用,可大大缩短编程时间, 本文所述的 FB功能块均以三菱 GX-Works2 软件为基础平台所写,本人所用版本为 G ...

  8. linux shell管道和xargs的区别

    如上图,加了xargs的话相当于将上一个操作的结果作为命令执行前的操作,不加的话直接先把后面的命令运行一遍再操作

  9. python和shell获取命令行参数的区别

    一.命令行参数的取得对于一些功能性的脚本来说非常有用,不至于将功能写死在脚本中. shell的命令行参数直接用 $ 1,$2 等就可以直接获取 其中 $1 表示 第二个参数,即命令行的第一个参数,因为 ...

  10. 东软Unieap平台

    东软Unieap平台 开发环境与技术栈 操作系统 WINDOS7 数据库 Oracle 开发语言 JAVA 版本控制工具 git 框架 Unieap是基于现在主流的JAVA开发框架(Hibernate ...