- 浏览: 1612990 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (603)
- T_java (145)
- T_script&ASP (51)
- T_C/C++ (25)
- T_PowerBuilder (11)
- T_Database (53)
- T_odoo (7)
- T_应用服务器 (50)
- T_专_条形码 (6)
- T_专_负载均衡器 (4)
- T_操作系统 (94)
- T_信息安全 (41)
- T_专_搜索引擎 (14)
- T_L_PHP (58)
- T_L_Delphi (18)
- T_L_.NET、C#、VisualStudio (25)
- T_L_Objective-C (6)
- T_移动开发 (53)
- T_网络 (109)
- T_大数据 (2)
- T_嵌入式 (2)
- T_小众技术 (24)
- T_未分类 (58)
- L_旅游印记 (1)
- L_生活随笔 (48)
- L_中国文化 (18)
- L_户外与生存 (0)
最新评论
-
csbean4004:
不知道哪传来得恶习,发帖子不好好发,故意弄错一些东西,很讨厌
让HTML5支持后置摄像头 -
withthewind:
终于找到一个可以用的了。。。
如何用VBA取得Word文档中的标题前面的序号 -
busbby:
兄弟,无法下载,说文件不完整
一个好用的Outlook ost格式文件转pst文件的工具 -
yijavakevin:
密码啊~解压密码多少?
一个二维条形码组件 -
vipbooks:
你给的那个链接根本无法下载,跳到官网看了下最新版12M,但点下 ...
十步以内完成精细web打印
原文出处:http://www.mzone.cc/article/270.html
htmlparser是一个基于java的用来解析html页面的开源组件,可以很方便对html页面进行标签分析、动态修改、删除特定的html标签等。但有些时候,我们可能需要自定义非HTML标签实现一些额外的功能,比如我经常使用htmlparser解析并处理页面后需要返回最终的处理结果,一般情况下我们获取html这个根标签,然后toHtml()就可以得到了。但如果页面本身就不规范,没有或包含多个html根标签呢?这样就会出现数据遗漏的情况,我这里就来讲下我的处理过程:
1、自定义一个根标签
2、将解析到的HTML内容使用根标签进行包裹
3、再使用htmlparser解析包裹的结果字符串并处理
4、获取自定义的根标签并返回标签内部的内容
5、输出最终的自定义标签的内部内容即可完整输出
首先,我们定义一个我们自己的html标签,在htmlparser中自定义标签需要继承CompositeTag类,该类非常简单,只需要覆写基类的getIds方法即可,如下:
package cc.mzone.html; import org.htmlparser.tags.CompositeTag; /** * 基于HtmlParser的全局顶层容器定义,包装所有的HTML内容。 * * @author 铁木箱子 * */ public class ContainerTag extends CompositeTag { private static final long serialVersionUID = -191586261848623602L; public static final String HTML_CONTAINER_TAG_NAME = "mzone-html-container"; @Override public String[] getIds() { return new String[] { HTML_CONTAINER_TAG_NAME }; } }
写完一个自定义html标签后,我们需要注册到htmlparser的解析其中,需要注意的是每个htmlparser解析器都需要单独注册额外的自定义html标签,我们这里先用自定义标签包裹要解析的html代码,然后再注册并解析根节点返回,代码片段如下:
package cc.mzone.html; import org.htmlparser.Node; import org.htmlparser.Parser; import org.htmlparser.PrototypicalNodeFactory; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.util.NodeList; /** * 获取包装后的顶层HTML元素 * @param content * @return * @throws Exception */ public Node getRootNode(String content, String encoding) throws Exception { // 先用我们自定义的标签包裹需要解析的内容content StringBuilder buf = new StringBuilder(); buf.append("<" + ContainerTag.HTML_CONTAINER_TAG_NAME + ">"); buf.append(content); buf.append("</" + ContainerTag.HTML_CONTAINER_TAG_NAME + ">"); // 获取一个htmlparser的解析器 Parser parser = Parser.createParser(buf.toString(), encoding); // 注册一个已经注册了我们自定义标签的节点工厂给上面的解析器,这个是关键 PrototypicalNodeFactory nodeFactory = new PrototypicalNodeFactory(); nodeFactory.registerTag(new ContainerTag()); parser.setNodeFactory(nodeFactory); // 解析内容获取顶层标签,即我们刚自定义的标签 NodeList list = parser.parse(new TagNameFilter(ContainerTag.HTML_CONTAINER_TAG_NAME)); return list.elementAt(0); }
然后我们就可以对这个内容进行分析和处理,等分析处理完成后,就需要获取最终的处理html内容,使用如下代码片段来获取:
package cc.mzone.html; /** * 获取最终的过滤结果 * @param root * @return * @throws Exception */ public String getFinalResult(Node root) throws Exception { String result = root.toHtml(); int len = ContainerTag.HTML_CONTAINER_TAG_NAME.length(); return result.substring(len + 2, result.length() - len - 3); }
其中root节点就是我们在getRootNode中得到的根节点,也就是我们自定义的html标签,在这个方法中我们仅仅是去掉这个节点的名称而已,从而也就实现了我们想要的目标。使用这个自定义标签可以非常好的解决html格式不标准的问题,从而可以兼容更多的情况和场合。
发表评论
-
SpringBoot Fat Jar解压运行
2018-06-28 21:40 2263SpringBoot已经成为当前最流行的微服务 ... -
一句话实现五星评分显示
2018-06-05 08:31 999Python: rate = 1 #rate 取值 ... -
TeamViewer13+Patch
2018-05-13 22:19 3204下载地址: https://www.datafilehos ... -
来算google的可视化编程工具——Blockly,不仅仅是玩具
2017-10-16 21:34 33162Blockly - 来自Google的可 ... -
Linux挂载阿里云对象存储OSS作为本地磁盘扩充空间备份网站
2017-09-25 08:54 1942p.s.挂载oss之后,使用rsync可以同步图片数据,非 ... -
安卓动态分析工具 Inspeckage
2017-08-07 08:46 0工具介绍 一个基于Xposed 开发的应用动态分析工具 g ... -
Android逆向之旅---静态方式破解微信获取聊天记录和通讯录信息
2017-08-07 08:37 0一、猜想数据存放路径 微信现在是老少皆宜,大街小巷都在使用 ... -
破解微信数据库 并查询数据上传服务器
2017-08-07 08:29 0由于工作需求破解了微信的数据库 并获取想要的信息上传服 ... -
安卓黑科技之HOOK详解
2017-08-07 08:21 0本文带大家进入到安卓另一个世界 互联网攻防大战 Xpos ... -
安卓逆向之基于Xposed-ZjDroid脱壳
2017-08-07 08:18 0前言 之前介绍了普通常见的反编译模式 但对于使用了 360 ... -
Chrome核心的自定义浏览器
2017-07-04 17:19 831以Chrome为核心的自定义浏览器源代码,有时候可能用得到,保 ... -
十步以内完成精细web打印
2017-06-21 11:44 7390注意: 康虎云报表组 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6705注意: 康虎云报表 ... -
让ie6 7 8 9支持html5 websocket
2016-12-23 20:52 2324结果: 从github上的 web ... -
网站获取用户手机号码的方法、系统、客户端及服务器(坑爹的玩意儿)
2016-11-22 14:22 2291网站获取用户 ... -
Ubuntu16.04上安装MT7601网卡驱动(TL-W725N/W725N)
2016-09-15 23:01 0I suggest you get a temporary ... -
如何在palcedoler中放置图标
2016-09-10 09:52 646如何在H5的palceholder中设置一个图标? ... -
疯狂软件对Oracle放弃Java EE的看法
2016-08-14 22:38 530来源:http://javaligang ... -
一个下载youtube视频的Linux工具
2016-07-01 08:50 952我们要介绍工具是youtube-dl。这是一个跨平台的工具, ... -
另一个穿透内网的工具(类似ngrok)
2016-06-20 20:26 4844前段时间介绍过两种把内网端口映射到公网的工具:ngrok ...
相关推荐
资源名称:扩展HTMLParser对自定义标签的处理能力内容简介: HTMLParser是一个用来解析HTML文档的开放源码项目,它具有小巧、快速、使用简单的特点以及拥有强大的功能。 现在该项目的最新版本是Integration Build ...
总结来说,HTMLParser是Python中用于解析HTML文档的基础工具,通过自定义事件处理方法,我们可以轻松地从中提取所需信息。尽管它可能不如某些更高级的库那样功能全面,但对于理解HTML结构和进行基础的数据提取,...
3. **事件驱动解析**:`htmlparser.jar`支持事件驱动的解析模式,当遇到特定的HTML标签或事件时,会触发回调函数,这种方式对内存使用友好,适用于处理大型HTML文档。 4. **灵活性**:这个库允许用户自定义解析规则...
此外,开发者还可以利用HTMLParser库进行自定义解析任务,例如从HTML文档中提取特定信息、清洗HTML代码、或者在服务器端预处理HTML以减轻客户端的负担。在JavaScript中,有像`jsdom`这样的库可以模拟浏览器的HTML...
- **Web测试**:验证网页的结构是否符合预期,检查HTML标签的正确性。 为了使用这些jar包,你需要确保将它们添加到你的Java项目类路径中。然后,你可以按照HTMLParser的API文档编写代码,创建解析器实例,设置事件...
`htmlParser`提供了事件驱动的解析模式,当解析器遇到如打开标签、关闭标签、文本内容等事件时,会触发相应的回调函数,这样我们就可以在这些回调中执行自定义逻辑。 例如,如果你想要提取所有的`<a>`标签链接,你...
这个库可能被用于从网页中提取数据,比如在爬虫项目中,或者进行自动化测试时解析页面内容。本篇文章将深入探讨HTMLParser的工作原理、如何使用以及一些常见应用场景。 1. **HTMLParser库介绍** HTMLParser是...
1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_starttag`、`handle_endtag`和`handle_data`,以便在遇到HTML标签开始、结束或数据时执行特定操作。 2. **启动爬虫*...
通过阅读源代码,开发者可以学习到如何处理HTML标签、属性、文本节点以及如何处理嵌套的HTML结构。 在C#中,HTMLParser可能采用了递归下降解析器或基于事件的解析器模式。递归下降解析器通常使用函数或方法的递归来...
5. **灵活性**:HTMLParser允许用户自定义解析策略,可以根据项目需求过滤、修改或提取HTML内容。 6. **错误处理**:对于不可预测的HTML源码,HTMLParser有良好的错误处理机制,能容忍并尽可能恢复不完整的HTML结构...
- **标签识别**:HTMLParser能够识别并处理HTML文档中的各种标签,如`<div>`、`<p>`、`<a>`等,同时支持自定义标签。 - **属性解析**:解析HTML元素的属性,例如`href`、`class`等,并提供访问这些属性的API。 - *...
需要注意的是,由于HTML的灵活性和非正规性,解析HTML时可能会遇到各种挑战,比如自定义标签、嵌套的脚本和样式,以及错误的语法。`htmllexer.jar` 和 `htmlparser.jar` 库应该已经考虑了这些问题,提供了一定程度的...
这个压缩包`HTMLParser.zip`包含了一个实现这一功能的完整项目,可以帮助程序员高效地解析、操作和提取HTML页面中的信息。 在Java中,HTMLParser提供了一个强大的API,可以解析HTML文档并将其转换为一个可操作的...
HTMLParser库的设计基于事件驱动的模式,它会为遇到的每一个HTML标签、属性、文本等内容触发特定的事件。通过继承自HTMLParser类并重写其方法,用户可以定制化解析过程,对HTML元素进行处理。例如,当遇到开始标签时...
4. **事件驱动模型**:`HtmlParser`通常采用事件驱动的方式工作,当遇到特定的HTML标签或内容时,会触发预定义的回调函数,允许开发者在解析过程中动态响应。 5. **灵活性**:库提供了多种配置选项,允许用户自定义...
在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...
6. **错误处理**:HTMLParser提供了强大的错误处理机制,可以在解析过程中捕获并处理各种错误,确保程序的稳定性。 7. **灵活性**:HTMLParser不仅支持基本的HTML解析,还可以通过扩展支持XML和其他标记语言。 8. ...
1. **HTML标签解析**:HTMLParser2.0能识别并处理HTML文档中的各种标签,如`<div>`, `<p>`, `<a>`等,帮助开发者提取所需信息。 2. **自定义标签处理**:一个独特的特性是它支持处理自定义的HTML标签,这对于解析...
你可以根据需求创建自定义的`TagProcessor`和`NodeFilter`来处理特定的HTML标签,或者过滤出需要的节点。HTMLParser的结构设计使得这些扩展非常直观和简单。 总的来说,HTMLParser是一个强大且易用的工具,适合那些...
3. **标签处理**:HTMLParser支持对HTML标签进行操作,如查找、替换、删除或修改标签的属性。 4. **内容提取**:能够方便地从HTML文档中提取文本内容,这对于数据抓取或信息提取任务非常有用。 5. **错误处理**:...