htmlparser是个优秀的网页信息抓取工具,下面小结其一些基本的用法:
1 创建parser对象,有两种方式
Parser parser=new Parser(String html)
传入的html
第2种为:
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
之后就可以进行访问parser中解析好的内容了
2 解析时,有两类方式,visitor方式和filter过滤方式,vistior方式需要遍历每一个节点,
而filter方式则是过滤。
3 visitor方式的例子;
try{
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建LinkFindingVisitor对象
LinkFindingVisitor lvisitor = new LinkFindingVisitor("http://news.qq.com/");
//查找http://www.qq.com的链接个数
parser.visitAllNodesWith(lvisitor);
System.out.println("网页中包含http://news.qq.com/的链接个数:"+lvisitor.getCount());
}catch(Exception ex){
ex.printStackTrace();
}
/** TextExtractingVisitor类的用法举例 */
public static void testTextExtractingVisitor(String url){
try{
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建StringFindingVisitor对象
TextExtractingVisitor visitor = new TextExtractingVisitor();
//去除网页中的所有标签,提出纯文本内容
parser.visitAllNodesWith(visitor);
System.out.println("网页的纯文本内容为:"+visitor.getExtractedText());
}catch(Exception ex){
ex.printStackTrace();
}
}
4 还可以自定义nodevisitor来扩展nodevisitor,重载其中的各方法:
/** 自定义NodeVisitor子类,并重载抽象类NodeVisitor中的相关方法 */
public class MyNodeVisitor extends NodeVisitor {
/** 重载抽象类NodeVisitor的beginParsing方法,解析开始时调用此方法 */
public void beginParsing(){
System.out.println("开始解析HTML内容......");
}
/** 重载抽象类NodeVisitor的finishedParsing方法,解析结束时调用此方法 */
public void finishedParsing(){
System.out.println("整个HTML内容解析完毕!");
}
/** 重载抽象类NodeVisitor的visitTag方法,遇到开始标签时调用此方法 */
public void visitTag(Tag tag){
System.out.println("开始当前标签: "+tag.getText());
}
/** 重载抽象类NodeVisitor的visitEndTag方法,遇到结束标签时调用此方法 */
public void visitEndTag(Tag tag){
System.out.println("结束当前标签: "+tag.getText());
}
/** 重载抽象类NodeVisitor的visitStringNode方法,遇到文本节点时调用此方法 */
public void visitStringNode(Text string){
System.out.println("当前文本节点: "+string);
}
/** 重载抽象类NodeVisitor的visitRemarkNode方法,遇到注释时调用此方法 */
public void visitRemarkNode(Remark remark){
System.out.println("当前注释: "+remark);
}
5 使用filter方式过滤
基本用法:
TagNameFilter类用法
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建TagNameFilter实例
NodeFilter filter = new TagNameFilter ("DIV");
//筛选出所有DIV标签节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("当前DIV:"+textnode.getText());
}
AndFilter类用法
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建HasAttributeFilter实例
NodeFilter filter1 = new HasAttributeFilter("id");
//创建TagNameFilter实例
NodeFilter innerFilter = new TagNameFilter ("DIV");
//创建HasChildFilter实例
NodeFilter filter2 = new HasChildFilter(innerFilter);
//创建AndFilter实例
NodeFilter filter = new AndFilter(filter1, filter2);
//筛选出所有具有id属性且拥有子节点的所有DIV节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("当前DIV:"+textnode.getText());
}
}
StringFilter类用法:
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建StringFilter实例
NodeFilter filter = new StringFilter("陈水扁");
//筛选出所有包含"陈水扁"字符串的所有文本节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("包含\"陈水扁\"字符串的文本节点:"+textnode.getText());
}
}
相关推荐
6. **示例代码**:描述中提到的"自己写了一个小例子",这通常是演示如何使用HTMLParser库的代码,包含了如何实例化解析器、加载HTML、选择元素、提取数据等基本操作。通过分析这个demo,我们可以快速上手使用这个库...
5. **API设计**:HTMLParser的API设计简洁明了,易于学习和使用。开发者可以通过`HTMLDocument`、`Tag`、`Attribute`等类来操作HTML元素,通过`Handler`接口来定义自定义的事件处理器。 6. **兼容性**:HTMLParser ...
总结来说,Winista.Htmlparser是一个强大且易用的C# HTML解析库,提供了丰富的API和事件机制,使得处理HTML变得简单。通过深入研究其源码,开发者可以更好地理解HTML解析的过程,提高程序的效率和准确性。配合提供的...
9. **学习与实践**:要深入理解和使用HTMLParser,需要掌握基本的HTML语法,熟悉DOM操作,以及理解如何通过编程语言(如Java)与解析器进行交互。实践是提高的关键,可以尝试解析一些实际的HTML文档,提取特定信息,...
总结来说,HTMLParser是一个强大且灵活的HTML解析工具,适合处理各种HTML文档,特别是当需要在Java环境中进行HTML内容的解析和处理时,它提供了一种高效且无依赖的解决方案。通过阅读源码、文档以及使用提供的例子,...
- "HtmlParser学习笔记总结.doc":对学习过程的总结,可能包含常见问题解答和最佳实践。 - "yanghaisheng.platform.htmlparser.rar":可能包含一个示例平台或项目,供用户实践和参考。 总之,HtmlParser是Java中一...
在众多的HTML解析工具中,`htmlParser`脱颖而出,以其易用性和高效性成为许多开发者的选择。本篇文章将深入探讨`htmlParser`这一...通过学习和熟练掌握`htmlParser`,开发者可以更高效地完成网页数据的抓取和处理任务。
总结来说,C# HTMLParser是一个强大的工具,可以帮助开发者轻松地解析和操作HTML文档。通过熟悉它的API和方法,你可以有效地提取和处理网页中的信息。结合实际项目需求,不断探索和实践,你会发现HTMLParser在处理...
HTMLParser教程是一个面向开发者的学习资源,它主要涵盖了如何在编程中解析和处理HTML文档的核心概念。这个教程可能包括了Python的HTMLParser库的使用,也可能涉及其他编程语言中的类似库,如Java的jsoup或...
总结来说,HTMLParser爬取气象信息的实例展示了如何利用Python的内置解析器来提取网页中的特定信息。通过定义自定义的事件处理器,我们可以根据需要处理HTML文档中的元素,从而有效地获取和分析数据。结合其他工具,...
总结,HTMLParser是一个强大的HTML处理工具,其简洁的API和事件驱动模型使得处理HTML文档变得轻松。通过熟练掌握HTMLParser,开发者可以更高效地解析、提取和操作HTML数据,从而在Web开发中实现更多功能。
标题“由新水浒到htmlparser的一次运用”暗示了这篇...同时,压缩包中的"HTMLParser+API.CHM"文件很可能是HTMLParser的API文档,包含了关于库的所有函数、方法和类的详细说明,是学习和使用HTMLParser的重要参考资料。
总结来说,Winista.Htmlparser是一个针对C#开发者的高效网页解析工具,它提供了简单易用的API、优秀的性能以及丰富的自定义可能性。无论你是初次接触网页解析,还是有经验的开发者,这个类库都能帮助你轻松地处理...
总结来说,"htmlparser:cpp htmlparser实现"是一个专注于在C++中解析HTML文档的库,它涉及到了HTML语法规则的理解、解析器设计模式的运用、内存管理、事件驱动编程、DOM树构建、错误处理、性能优化以及库的可扩展性...
总结,"java 新浪网易搜狐新闻抓取源码"项目展示了如何使用Java和HTMLParser库来实现新闻数据的抓取和处理。通过学习和实践这样的项目,开发者不仅可以掌握网页抓取的基本技能,还能深入理解HTTP协议、HTML解析以及...
根据提供的文档内容,我们可以总结出以下关键知识点,这些知识点主要围绕Lucene+Solr以及HtmlParser在正文提取方面的应用。 ### HtmlParser与ContentExtractor **HtmlParser简介:** HtmlParser是一个用于解析HTML...
**1.4 本章小结** - **概述:** 总结了本章的主要内容,并为接下来的技术讲解做了铺垫。 #### 二、搜索引擎核心技术详解 **2.1 30分钟实现的搜索引擎** - **步骤说明:** - 准备工作环境(10分钟) - 编写代码...
### Python语法总结 #### 1. Python 3 ##### 1.1 数据类型 Python 提供了多种内置的数据类型,这些类型是理解任何 Python 程序的基础。 ###### 1.1.1 整数,浮点数,字符串,布尔值(True、False),空值(None...
通过查看和学习这个项目的源码,你可以了解到如何将WebMagic应用于实际的爬虫工程,如何组织项目结构,以及如何处理数据抓取过程中的各种问题,如反爬机制、数据清洗和存储等。 总结来说,"基于 webmagic 的 Java ...
- **11.4 本章小结**:总结了本章的关键知识点,为后续章节的学习打下基础。 #### 第2章:遍历搜索引擎技术 - **2.1 30分钟实现的搜索引擎**: - **2.1.1 准备工作环境(10分钟)**:介绍如何搭建开发环境,包括...