热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用htmlparser

htmlparser是一个解析html的java框架,可以将你需要的内容从网页中提取出来,可以用来做一个网页爬虫或者简单的数据提取器。框架主页:http:htmlparser.sourceforge.net 看了下jtidy,也是和它一样的功能,但是htmlparser似乎更为简便,解析起来支持中文,编码方便。学习资源:http:www.ibm.c

html parser 是一个解析html的java框架 ,可以将你需要的内容从网页中提取出来,可以用来做一个网页爬虫或者简单的数据提取器。

框架主页:http://htmlparser.sourceforge.net/

 

看了下jtidy,也是和它一样的功能,但是html parser似乎更为简便,解析起来支持中文,编码方便。

学习资源:

http://www.ibm.com/developerworks/cn/java/l-html-parser/

http://allenj2ee.javaeye.com/blog/222454

http://www.blogjava.net/amigoxie/archive/2008/01/18/176200.html

 

html parser主要使用一个parser来解析网页,通过过滤器filter或者visitor来访问所需要的节点,目前使用的版本为1.6。

html parser是使用递归的方式来层级选取节点,所以在使用过滤器和visitor的时候需要添加true来支持子元素的查询,否则默认就只查询当前节点。

 

 

Parser parser = new Parser("http://www.baidu.com");

 

这是最简单的代码,通过parser的构造函数传入一个需要解析的网址,生成一个parser对象。

通过parser对象,就可以解析出一系列的元素。

 

filter:

filter是过滤器,我们使用不同的过滤器来获得想要的不同结果。

所有的过滤器实现与NodeFilter接口。

其中最常用的为css选择器过滤器,字符串选择过滤器,节点类型选择过滤器(NodeClassFilter),标签名过滤器(TagNameFilter)等。

使用html parser

使用方法为:

new一个过滤器

NodeFilter filter = new CssSelectorNodeFilter(".cp_kind");

将过滤器放入需要解析的parser或者nodeList中,true代表递归过滤,默认为false

 

NodeList allProductList = nodeList.extractAllNodesThatMatch(filter, true);

 

 

 

visitor:

visitor是一个标准访问器,用来定义为访问html页面的哪一部分。

例如最常用的htmlPage

 

代码
HtmlPage visitor = new HtmlPage(parser);

parser.visitAllNodesWith(visitor);

String textInPage
= visitor.getTitle();
System.out.println(textInPage);

//get body
NodeList nodelist = visitor.getBody();
System.out.print(nodelist.asString().trim());

 

这样就可以将body分离出来

 

visitor默认继承与NodeVisitor

使用html parser

最常用的当然是htmlpage和tagfindingvisitor

 

其实html parser不难用,只是网页规则千变万化,解析起来有难度而已。


推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
author-avatar
二狗子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有