引入主要包:
htmlparser.jar
解析HtmlParser的主要步骤:
解析出html中url
// Parser parser = new Parser( (HttpURLConnection) (new URL("http://www.google.com")).openConnection() );
Parser parser = new Parser();
parser.setEncoding(parser.getEncoding());
parser.setURL("http://www.google.com");
NodeFilter filter = new NodeClassFilter(LinkTag.class);
NodeList list = parser.extractAllNodesThatMatch(filter);
for (int i = 0; i < list.size(); i++) {
LinkTag node = (LinkTag) list.elementAt(i);
System.out.println(node.extractLink());
}
Visitor方式解析Html
使用visitor方式访问Html,一般不用这种方式,不细说
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL("http://www.google.com")).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建LinkFindingVisitor对象
LinkFindingVisitor lvisitor = new LinkFindingVisitor("http://www.google.com");
//查找http://www.qq.com的链接个数
parser.visitAllNodesWith(lvisitor);
System.out.println("网页中包含http://www.google.com的链接个数:"+lvisitor.getCount());
Filter方式解析HTML
HtmlParser也可以解析文本在本地:
Parser parser = new Parser("d:\\1.html");
parser.setEncoding(parser.getEncoding());
NodeFilter filter = new NodeClassFilter(LinkTag.class);
NodeList list = parser.extractAllNodesThatMatch(filter);
for (int i = 0; i < list.size(); i++) {
LinkTag node = (LinkTag) list.elementAt(i);
System.out.println(node.extractLink());
}
HtmlParser自带的Filter:
TagNameFilter 接受所有满足指定Tag名的TagNodes.
TagNameFilter filter = new TagNameFilter("a");
NodeList nodeList = parser.parse(filter);
NodeClassFilter 接受所有接受指定的类的节点.
NodeFilter filter = new NodeClassFilter(LinkTag.class); //如链接标签
或
NodeFilter filter = new NodeClassFilter(TextNode.class); //如文本标签
NodeList nodeList = parser.parse(filter);
Node[] nodes = nodeList.toNodeArray(); //返回Node[]节点数组的情况
或
NodeClassFilter filter = new NodeClassFilter(TableTag.class);对表格的过滤获取
NodeList nodeList = parser.parse(filter);
TableTag tableTag = (TableTag) nodeList.elementAt(0);
TableRow[] rows = tableTag.getRows();
HasAttributeFilter 接受所有否含有某个属性(还可以设置该属性的值)的节点.
HasChildFilter 接受所有含有子节点符合该Filter的节点.
TagNameFilter filter = new TagNameFilter(tag);
HasChildFilter hasChildFilter = new HasChildFilter(filter);
NodeList nodeList = parser.parse(hasChildFilter);
HasParentFilter 接受所有含有父节点符合该Filter的节点.
LinkRegexFilter 接受所有linkTag标签的link值.匹配给定的正则表达式的节点.
LinkStringFilter 接受所有linkTag标签的link值,匹配给定的字符串的节点.
AndFilter 相当于一个AND操作符,接受所有同时满足两个Filter的节点.
NotFilter 接受所有不符合Filter的节点.
OrFilter 相当于一个AND操作符,接受所有满足两个Filter中任意一个的节点.
XorFilter 相当于一个XOR操作符,接受所有只满足其中1个Filter的节点.
RegexFilter 接受所有满足指定正则表达式的String Nodes.
StringFilter 接受所有满足指定String的String Nodes.
IsEqualFilter 接受所有和某个特定的节点相同的节点.
CssSelectorNodeFilter 接受所有支持CSS2选择器的节点.
HasSiblingFilter 接受所有含有兄弟节点符合该Filter的节点.
TagNameFilter filter = new TagNameFilter(tag);
HasSiblingFilter hasSiblingFilter = new HasSiblingFilter(filter);
NodeList nodeList = parser.parse(hasSiblingFilter);
Tag类
主要和NodeClassFilter配合使用
Remark:注释,
AppletTag:
BaseHrefTag,:
BodyTag:"BODY";//getBody();内部调用额是toPlainTextString();
Bullet:"LI"
BulletList:"UL","OL"
CompositeTag:
DefinitionList:"DL"
DefinitionListBullet:"DD","DT"
Div:"DIV"
DoctypeTag,:"!DOCTYPE"
FormTag,:
FrameSetTag:
FrameTag:
HeadingTag:"H1","H2","H3","H4","H5","H6"
HeadTag:"HEAD"
Html:"HTML"
ImageTag:
InputTag:"INPUT"
JspTag:"%","%=","%@"
LabelTag:"LABEL"
LinkTag:
MetaTag:
ObjectTag:
OptionTag:
ParagraphTag:"P"
ProcessingInstructionTag:"?"
ScriptTag,:
SelectTag:"SELECT"
Span:"SPAN"
StyleTag:"STYLE"
TableColumn:"TD"
TableHeader:"TH"
TableRow:"TR"
TableTag:"TABLE"
TagNode:
TextareaTag:"TEXTAREA"
TitleTag:"TITLE"
TextNode:
Htmlparser结构:
Tag分为简单Tag和复杂Tag
参考文献
- 大小: 93.2 KB
分享到:
相关推荐
这个"HTMLParser-2.0-SNAPSHOT"版本可能是HTMLParser的一个开发版本或测试版本,包含了最新的特性和改进。 HTMLParser提供了丰富的API,使得开发者可以方便地操作HTML元素,如标签、属性和文本。以下是一些关键的...
Node接口定义了一系列方法,包括获取父节点、子节点和兄弟节点,将节点转换为HTML文本,确定节点在原始HTML源码中的位置,以及实现过滤和Visitor访问模式。这些方法使得开发者能够遍历和操作HTML文档的结构。 2. **...
`htmlparser-to-html`是一个针对这个需求的开源库,它专注于将`htmlparser`或`htmlparser2`解析生成的JSON格式数据转换回原始的HTML字符串。下面我们将深入探讨这个库的核心功能、应用场景以及如何使用。 ### 核心...
在`parse5-master`这个压缩包中,很可能包含了parse5库的源码和相关资源,你可以通过阅读源码、查看示例和文档来更深入地理解这个库的工作原理,以及如何有效地使用`parse5-htmlparser2-tree-adapter`。同时,熟悉这...
HTMLParser-2.0-API.CHM
在提供的压缩包中,`HTMLParser-2.0-SNAPSHOT-bin`可能是可执行的二进制文件,包括了编译好的JAR文件和其他运行所需的资源。而`HTMLParser-2.0-SNAPSHOT`可能包含了源代码,这对于开发者来说是宝贵的,因为他们可以...
public class HtmlLinkParser { //获取子链接,url为网页url,filter是链接过滤器,返回该页面子链接的HashSet public static Set<String> extracLinks(String url, LinkFilter filter) { ...
自制CHM版的API文档,带索引。 注:如果各位下载后打开或无法显示页面,请在CHM文件右键—属性—解除锁定即可。
它可以匹配一系列符合特定规则的字符串。 2. **元字符**:如`*`、`+`、`?`、`.`、`^`、`$`、`\`、`|`、`(`、`)`、`{`、`}`等,它们在正则表达式中有特殊的含义,用于构建复杂的匹配规则。 3. **量词**:`*`表示零...
"htmlparser-1.6p.jar"是该库的特定版本,用于在Java环境中集成和使用。 HTMLParser的核心功能包括: 1. **标签和属性处理**:它可以识别并解析HTML文档中的各种标签,如`<html>`, `<head>`, `<body>`等,同时处理...
htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载
首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解HTMLParser的关键资源。通过阅读这份文档,你可以了解到如何初始化解析器,...
首先,我们来了解HTMLParser-C++的基本原理。HTML并非一种严格的XML格式,因此解析HTML需要处理其非规范性和不确定性。HTMLParser-C++库通过解析HTML的语法特性,识别出标签、属性和文本节点,并将其转化为易于处理...
标题中的“lucene_JE分词_htmlParser--jar包”表明这是一个包含与Lucene、JE分词和HTMLParser相关的Java库的集合。这些组件在IT领域中有着特定的应用,特别是对于文本处理和搜索引擎构建。 首先,让我们详细了解...
1. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这部分是API文档,包含了HTMLParser 2.0的详细接口说明。通过解压这个文件,开发者可以了解到如何使用该库的各种方法、类和接口。在开发过程中,API文档是必不可少的参考...
2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是HTMLParser库的API文档,包含了详细的Javadoc。通过解压并查阅这个文档,开发者可以了解每个类、方法和接口的功能,这对于理解和使用库中的各种功能至关重要。 3. **...