大数据处理之道 (htmlparser获取数据<一>)

一:简介

(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中包含的方法有几类:

对于树型结构进行遍历的函数,这些函数最容易理解:

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

时间: 2024-11-08 00:34:41

大数据处理之道 (htmlparser获取数据<一>)的相关文章

大数据处理之道 (MATLAB 篇&lt;三&gt;)

一:起因 (1)最近一直在处理大数据,从MB ----> GB的变化,是一次质的飞跃,相应的工具也在变 从widows到linux,从单机单核 到 hadoop多节点的计算 (2)问题来了,面对海量的数据,如何从中挖掘实用的信息或者发现潜在的现象,可视化工具可能是必不可少的 : (3)可视化工具可以说百度一大篇,可是作为研究者的我们,程序猿的我们可能更希望能够抽象出一种数学模型,对现实的现象进行非常好的描述和刻画 (4)Python(数据清洗和处理) + MATLAB(模型分析) 或 c++/j

大数据处理之道 (htmlparser 过滤器&lt;二&gt;)

一:起因 (1)最近用于任务需要一直在爬取网页HTML的内容,与类似于爬虫的HtmlParser接触的比较多,爬取无非就是过滤自己想要的信息,因此Filter是核心,当然String类中的matches(regex)函数和contains(str)函数也是非常有用的 (2)经常和爬虫打交道就会分析各式各样的网站设计以及布局:用的设计的非常有规律,如QQ空间,微博信息等爬取非常简单(当时要想翻页的话,就得模拟登陆了),有些静态网站也是比较容易爬取的:其他的就麻烦了,信息全部写在JS里面,你就会哭了

大数据处理之道 (Gibbs Sampling)

一:简介以及学习的途径 (1)吉布斯采样(Gibbs Sampling)及相关算法  (学习向Gibbs sampling, EM,  MCMC算法 等的好地方) 1) 推荐大家读Bishop的Pattern Recognition and Machine Learning,讲的很清楚,偏理论一些: 2) 读artificial Intelligence,2.3版,都有: 3) 如果英语好的话,最方便的就是查wikipedia,这个说的最清楚(研究生推荐读一读这个) 4)不要什么都百度去,百度在

大数据处理之道 (MATLAB 篇)

一:起因 (1)最近一直在处理大数据,从MB ----> GB的变化,是一次质的飞跃,相应的工具也在变 从widows到linux,从单机单核 到 hadoop多节点的计算 (2)问题来了,面对海量的数据,如何从中挖掘实用的信息或者发现潜在的现象,可视化工具可能是必不可少的 : (3)可视化工具可以说百度一大篇,可是作为研究者的我们,程序猿的我们可能更希望能够抽象出一种数学模型,对现实的现象进行非常好的描述和刻画 (4)Python(数据清洗和处理) + MATLAB(模型分析) 或 c++/j

大数据处理之道 (MATLAB 篇(二))

一:起因 (0)开始个人非常抵触MATLAB编程语言的,肯能是部分编程人员的通病 -- 学会c/c++或者java,就会鄙视其他的语言,懒得尝试其他语言.直到有一天--他发现,他或者她发现自己精通的这门语言实在是解决不了这个问题时,才做出改变. (1)最近一直在处理大数据,从MB ----> GB的变化,是一次质的飞跃,相应的工具也在变 从widows到linux,从单机单核 到 hadoop多节点的计算 (2)问题来了,面对海量的数据,如何从中挖掘实用的信息或者发现潜在的现象,可视化工具可能是

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

一:交叉验证(crossvalidation)(附实验的三种方法)方法简介 (1) 定义:交叉验证(Cross-validation)主要用于建模应用中,例如PCR(Principal Component Regression) .PLS(Partial least squares regression)回归建模中.在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和.这个过程一直进行,直到所有的样本都被预报了一次而且仅

大数据处理之道(预处理方法)

一:为什么要预处理数据? (1)现实世界的数据是肮脏的(不完整,含噪声,不一致) (2)没有高质量的数据,就没有高质量的挖掘结果(高质量的决策必须依赖于高质量的数据:数据仓库须要对高质量的数据进行一致地集成) (3)原始数据中存在的问题: 不一致 -- 数据内含出现不一致情况 反复 不完整 -- 感兴趣的属性没有 含噪声 -- 数据中存在着错误.或异常(偏离期望值)的数据 高维度 二:数据预处理的方法 (1)数据清洗 -- 去噪声和无关数据 (2)数据集成 -- 将多个数据源中的数据结合起来存放

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

一:python 简介 (1)Python的由来 Python(英语发音:/?pa?θ?n/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991 年.Python语法简洁而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结 在一起.常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的

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

最近做项目,需要做一个从mysql数据库中随机取几条数据出来. 总所周知,order by rand 会死人的..因为本人对大数据量方面的只是了解的很少,无解,去找百度老师..搜索结果千篇一律.特发到这里来,供大家学习. 在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的.下面我来介绍随机取数据一些优化方法. SELECT * FROM table_name ORDER BY ran