`

HtmlParser学习系列 -- 学习总结

 
阅读更多

引入主要包

   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-1.0.5

    5. **API设计**:HTMLParser的API设计简洁明了,易于学习和使用。开发者可以通过`HTMLDocument`、`Tag`、`Attribute`等类来操作HTML元素,通过`Handler`接口来定义自定义的事件处理器。 6. **兼容性**:HTMLParser ...

    HtmlParser c#源码+demo

    总结来说,HtmlParser c#源码提供了处理HTML文档的能力,包括解析、查询、提取信息等功能。通过学习源码和示例,开发者可以更好地理解和应用这个工具,同时也可以根据需要对其进行定制,以适应不同的项目需求。

    开发资料下载 HTMLParser教程

    HTMLParser教程是一个面向开发者的学习资源,它主要涵盖了如何在编程中解析和处理HTML文档的核心概念。这个教程可能包括了Python的HTMLParser库的使用,也可能涉及其他编程语言中的类似库,如Java的jsoup或...

    htmlparser

    9. **学习与实践**:要深入理解和使用HTMLParser,需要掌握基本的HTML语法,熟悉DOM操作,以及理解如何通过编程语言(如Java)与解析器进行交互。实践是提高的关键,可以尝试解析一些实际的HTML文档,提取特定信息,...

    Python2.7学习文档

    - 对整个学习过程的回顾与总结,强调实践的重要性。 以上内容涵盖了Python 2.7学习文档中的主要知识点,为初学者提供了一个全面的学习框架。通过系统学习这些内容,不仅可以掌握Python的基本语法,还能深入理解其...

    廖雪峰Pyhton教程3.x版[完整版]

    - **期末总结**:对整个教程进行总结回顾。 综上所述,《廖雪峰Python教程3.x版》不仅是一本入门教程,还包含了丰富的进阶内容,适合从零开始学习Python的初学者到希望深入了解Python的进阶用户。通过本教程的学习...

    Python3-廖雪峰[带标签完整版]

    ### Python3基础教程概览与核心知识点解析 #### 一、Python简介 - **定义**:Python 是一种广泛使用的高级...- **回顾与展望**:总结学习成果,规划未来发展。 - **Python 学习路线**:从基础到高级的学习路径建议。

    高清彩版 自己动手写搜索引擎

    - **11.4 本章小结**:总结了本章的关键知识点,为后续章节的学习打下基础。 #### 第2章:遍历搜索引擎技术 - **2.1 30分钟实现的搜索引擎**: - **2.1.1 准备工作环境(10分钟)**:介绍如何搭建开发环境,包括...

    python使用htmllib分析网页内容的方法

    虽然现在更推荐使用更新的库如`BeautifulSoup`或`lxml`,但理解`htmllib`的基本用法仍然有价值,尤其是对于学习HTML解析原理。 `htmllib`模块提供了`HTMLParser`类,它是一个基础的HTML解析器,遵循SGML(Standard ...

Global site tag (gtag.js) - Google Analytics