对于TagSoup可能有些人会比较陌生,TagSoup是Java语言开发的,通过SAX引擎解析结构糟糕、令人抓狂的不规范HTML文档的小工具。TagSoup可以将一个HTML文档转换为结构良好的XML文档(近似于XHTML),方便开发人员对获取的HTML文档进行解析等操作。同时TagSoup提供了命令行程序,可以运行TagSoup来对HTML文档进行解析。
但是TagSoup的缺陷就是,官方网站(
http://home.ccil.org/~cowan/XML/tagsoup/)上不提供API文档的链接,同时也不提供开发指南,只提供了一个40页的幻灯片(
http://home.ccil.org/~cowan/XML/tagsoup/),是其在Extreme Markup Languages 2004上的演讲。这对于将TagSoup整合到自己的应用程序中还是遇到了很大的挑战!
使用TagSoup的开发流程:
- 创建Parser实例;
- 提供自己的SAX2内容处理器
- 提供只想需要解析的HTML的InputSource实例;
- 开始parse()!
由于个人能力有限,这几句话把我直接搞懵了,所以决定仔细研究下。
TagSoup包含2个包、16个类文件(文件数目还是比较少的,但是功能很强大!)。其中核心类包括Parser、PYXScanner、XMLWriter。
- org.ccil.cowan.tagsoup.Parser,该类继承自org.xml.sax.helpers.DefaultHandler,可知该类是一个SAX型的解析器;
- org.ccil.cowan.tagsoup.PYXScanner,该类实现了Scanner接口,用于读取解析后的内容;
- org.ccil.cowan.tagsoup.XMLWriter,该类继承自org.xml.sax.helpers.XMLFilterImpl,同时实现org.xml.sax.ContentHandler接口(这个是最主要的),也就是说XMLWriter是TagSoup为我们提供的HTML解析成XML文档的默认实现。
那么找到了这三个核心类,就按照上面的流程开始解析吧,以下是我个人写的一个小例子:
StringReader xmlReader = new StringReader("");
StringReader sr = new StringReader(html);
InputSource src = new InputSource(sr);//构建InputSource实例
Parser parser = new Parser();//实例化Parse
XMLWriter writer = new XMLWriter();//实例化XMLWriter,即SAX内容处理器
parser.setContentHandler(writer);//设置内容处理器
parser.parse(src);//解析
Scanner scan = new PYXScanner();
scan.scan(xmlReader, parser);//通过xmlReader读取解析后的结果
char[] buff = new char[1024];
while(xmlReader.read(buff) != -1) {
System.out.println(new String(buff));//打印解析后的结构良好的HTML文档
}
分享到:
相关推荐
HTML解析工具 TAGSOUP android下很好用。 SAX的
在Web开发中,由于各种原因,很多网页的HTML结构并不规范,TagSoup通过其灵活的解析策略,能够有效地解析这些“不完美”的HTML,从而为开发者提供了一种强大的工具。 TagSoup的核心特性在于其对HTML的宽容性。它...
readme.md文件是标准的文档文件,通常包含安装指南、使用说明、软件功能描述等重要信息,为用户提供文档支持。而tagsoup-javadoc-1.2.1-8.el7.noarch.rpm是RPM软件包格式的文件,noarch表示这个软件包是平台无关的,...
同时,了解如何将这样的工具集成到大型项目中,对于提升个人的软件开发技能和理解复杂系统的构建具有很大的帮助。所以,无论是对WorldWindJava项目本身的贡献,还是在日常工作中处理HTML数据,掌握Tagsoup都是非常有...
Centos8操作系统tagsoup-1.2.1-15.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tagsoup-1.2.1-15.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
【世界风Java源码-TagsSoup-releases-only:TagSoup的另一个存储库,仅包含已发布版本】 在IT行业中,源码是理解软件工作原理的关键。"World Wind Java" 是一个开源项目,由美国国家航空航天局(NASA)开发,旨在为...
离线安装包,亲测可用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用
这个库是由John Cowan开发的,它被设计成一个Java库,同时也提供了一个命令行接口。Tagsoup遵循HTML5的解析规则,即使面对乱七八糟的HTML标签,也能进行有效解析,使得开发者可以方便地从中提取结构化信息。 HTML...
Java提供了多种库来解析HTML,如Jsoup和TagSoup。这些库能够解析HTML文档,提取数据,甚至处理不规范的HTML代码。例如,Jsoup库允许开发者方便地解析、操作和清理HTML,实现网页抓取和数据提取等功能。 三、渲染...
TagSoup是用于解析HTML / XML的库。 它支持HTML 5规范,可用于解析格式正确的XML或来自网络的非结构化和格式错误HTML。 该库还提供了有用的功能,可从HTML文档中提取信息,非常适合进行屏幕抓取。 该库提供了用于...
purescript-lenient-html-parser 受ndmitchell的启发,用于purescript的一种相对宽松HTML解析器。 目前仅出于我的目的进行测试。 请提出问题并提交PR !!! 安装 bower i purescript-lenient-...可用文档
在Android应用开发中,消息推送是一项至关重要的功能,它允许应用程序在后台向用户发送通知,即使用户并未直接与应用交互。这种技术对于提高用户参与度、实时通信以及更新通知至关重要。本文将深入探讨“Android消息...
- JSP中的标签混合(Tagsoup)导致代码可读性差。 - 不容易与REST或安全机制集成,限制了其灵活性和安全性。 - 缺乏统一的实现来源,可能导致版本间的兼容性问题。 2. **Spring MVC** - 优点: - 提供生命周期...
asm-3.2.jar bcprov-ext-jdk15-145.jar bcprov-jdk15-145.jar commons-compress-1.0.jar fontbox-0.8.0-incubating.jar jempbox-1.0.0.jar log4j-1.2.13.jar metadata-extractor-2.3.1....tagsoup-1.1.3.jar xbean.jar
这个平台采用Java语言开发,具有丰富的文档资料,能够有效地帮助开发者构建和管理爬虫项目。以下是对该平台各个组件的详细说明: 1. **爬虫架构**: - **爬虫**:负责爬取网页内容,解析并处理电子商务网站的数据...
常用解析器有TagSoup、nekohtml和htmlparser,其中Nutch支持tagsoup和nekohtml,Droids使用nekohtml,Tika使用tagsoup。 - **Handler**:处理Parser解析出的内容,可以通过SAX事件流的回调方式或主动解析整个HTML。...
2. TagSoup:主要处理不规范的HTML,因为它设计用来解析实际网络上常见的错误和非标准HTML。 3. HTMLUnit:这是一个无头浏览器,可以执行JavaScript,因此它在处理动态内容和执行页面上的事件方面非常有用。 四、...
HTML文件解析是Web开发中的一项基础任务,尤其是在处理动态生成的内容或者进行数据抓取时。在Java编程环境中,我们可以利用特定的库来帮助解析HTML,而这个“用于Html文件解析的jar包”正是提供了这样的功能。这篇...