如何使用Java自带的解析器从HTML中提取信息?

2023-12-20

我不想下载任何其他库,我正在谈论这个:javax.swing.text.html.HTMLEditorKit.Parser

如何使用此解析器提取页面中的重复信息?

举例来说,我在页面中重复了以下代码:

    <tr>
      <td class="info1">get this info</td>
      <td class="info2">get this info</td>
      <td class="info3">get this info</td>
    </tr>

我可以有任何示例代码吗?

提前致谢。


它是一个流解析器,因此在解析时它会告诉您它命中了什么。你应该延长HTMLEditorKit.ParserCallback http://docs.oracle.com/javase/7/docs/api/javax/swing/text/html/parser/DocumentParser.html一些课程(我称之为Parser),然后重写您关心的方法。

我相信它只适用于“swing 中的 html dtd”(请参阅here http://docs.oracle.com/javase/7/docs/api/javax/swing/text/html/parser/DocumentParser.html)。如果您正在做更复杂的事情,建议您使用外部 Java HTML 解析库,例如以下之一the ones https://stackoverflow.com/questions/26638/what-html-parsing-libraries-do-you-recommend-in-java我之前链接过。

这是基本代码(demo http://ideone.com/pC4dy):

import javax.swing.text.html.parser.*;
import javax.swing.text.html.*;
import javax.swing.text.*;
import java.io.*;

class Parser extends HTMLEditorKit.ParserCallback
{
        private boolean inTD = false;

        public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos)
        {
                if(t.equals(HTML.Tag.TD))
                {
                        inTD = true;
                }
        }

        public void handleEndTag(HTML.Tag t, int pos)
        {
                if(t.equals(HTML.Tag.TD))
                {
                        inTD = false;
                }
        }

        public void handleText(char[] data, int pos)
        {
                if(inTD)
                {
                        doSomethingWith(data);
                }
        }

        public void doSomethingWith(char[] data)
        {
                System.out.println(data);
        }

}

class HtmlTester
{
        public static void main (String[] args) throws java.lang.Exception
        {               
            ParserDelegator pd = new ParserDelegator();
            pd.parse(new BufferedReader(new InputStreamReader(System.in)), new Parser(), false);
        }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Java自带的解析器从HTML中提取信息? 的相关文章

  • 使用 JDBC 获取 Oracle 11g 的最后插入 ID

    我是使用 Oracle 的新手 所以我将放弃之前已经回答过的内容这个问题 https stackoverflow com questions 3131064 get id of last inserted record in oracle
  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • 使用 WebDriver 单击新打开的选项卡中的链接

    有人可以在这种情况下帮助我吗 场景是 有一个网页 我仅在新选项卡中打开所有指定的链接 现在我尝试单击新打开的选项卡中的任何一个链接 在下面尝试过 但它仅单击主 第一个选项卡中的一个链接 而不是在新选项卡中 new Actions drive
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 如何强制jar使用(或jar运行的jvm)utf-8而不是系统的默认编码

    我的Windows默认编码是GBK 而我的Eclipse完全是utf 8编码 因此 在我的 Eclipse 中运行良好的应用程序崩溃了 因为导出为 jar 文件时这些单词变得不可读 我必须在 bat 文件中写入以下行才能运行该应用程序 st
  • Base36 编码字符串?

    我一直在网上查找 但找不到解决此问题的方法 在 Python Ruby 或 Java 中 如何对以下字符串进行 Base 36 编码 nOrG9Eh0uyeilM8Nnu5pTywj3935kW 5 Ruby 以 36 为基数 s unpa
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向

随机推荐

  • 使用 arquillian+omnifaces 运行测试时出现 java.util.ServiceConfigurationError

    我收到以下错误 java util ServiceConfigurationError javax servlet ServletContainerInitializer 提供者 org omnifaces ApplicationIniti
  • 房间使用日期字段

    我正在使用日期转换器类来转换我的日期对象 但是 我仍然遇到一个错误 错误 无法弄清楚如何将此字段保存到数据库中 您可以考虑为其添加类型转换器 我的日期转换器课程 public class DateConverter TypeConverte
  • Objective C - 在主线程上调用类方法?

    我怎样才能打电话CLASS METHOD在主线程上 就像是 SomeClass performSelectorOnMainThread staticMethod withObject nil 请不要告诉我创建一个常规方法来调用此类方法 这将
  • git checkout 而不覆盖数据

    你怎么git checkout而不覆盖数据 I run git checkout master I get error Entry forms answer php would be overwritten by merge Cannot
  • 在 Java 中连接两个字符串然后转换为日期

    我需要在 Java 中将两个字符串连接在一起 然后格式化该字符串并将其设为 Date 对象 我现在拥有的两个字符串是31 01 2012 and 20 00我想做一些类似的事情 try DateFormat formatter new Si
  • 从 TFS 2015 Rest API 返回什么对象

    我正在使用 TFS 2015 Rest api 来检索构建定义并使用这些调用构建详细信息 定义 http tfs DefaultCollection apis build definitions name ampm api 版本 2 0 构
  • 如何访问 QTextDocument 页面

    我正在尝试构建一个以分页方式显示富文本文档的应用程序 或多或少像 MS Word 那样 目前 我希望一次只显示一页 From 这个问题 https stackoverflow com questions 3605368 how to pag
  • Blackberry WebWorks 中包含哪个版本的 WebKit?

    我能找到的就是 WebKit 它很有用 因为 BBOS5 甚至没有它 但如果有具体的版本就更好了 我正在尝试让 PDF js 工作 想知道我是否应该放弃 如果您确实想了解不同 BlackBerry 设备中的 WebKit 版本 请查看我们的
  • Java 中是否允许空字符串作为枚举成员

    我在处理一些遗留代码时遇到了一些问题 一张票要求我编写一个脚本来测试流程的有效性 但是 运行脚本时我不断收到此异常 java lang IllegalArgumentException No enum const class edu cmu
  • 从数据源拖放到 WPF 窗口不起作用

    我的任务是为我的公司设计一个联系人管理程序 我们有 VS 2012 因为我之前从未使用过 WPF 所以我想用它来开发这个应用程序 在使用数据库的实体框架时 我在开始绑定时遇到了巨大的问题 顺便说一句 首先是数据库 我已按照该信函链接中的说明
  • 如何添加可水平滚动的单行图像列表(在react js中)

    我想获得一些有关如何添加可水平滚动的单行图像列表的建议 解决方案和方法 假设您有一个 html 页面 其中包含多个 div 元素 并且该页面可以垂直滚动 在页面的最后一行 我想显示可以水平滚动的图像列表 可以做什么来达到这个效果呢 请参考下
  • Vagrant 中的符号链接和同步文件夹

    我想使用 Vagrant 为我的团队提供一个通用的开发环境 主机完全不同 有些使用 OS X 有些使用 Linux 有些使用 Windows 有些使用VMware 有些使用VirtualBox 我们想要在虚拟机内部运行 Linux 到目前为
  • 在 Google Apps 脚本 MailApp.sendEmail 中使用抄送和/或密件抄送

    我正在 Google Apps 脚本中运行以下脚本 emailAddress 是从工作表中提取的变量 MailApp sendEmail emailAddress subject message htmlBody message 我正在尝试
  • UITableView 标题位于各部分的左侧(如 Spotlight)

    我已经搜索了很长一段时间了 但仍然没有找到方法 我想将 iPhone 的 Spotlight 的节标题复制到 UITableView 中 众所周知 当您滚动时 常规 表视图标题在部分顶部保持可见 但有一种标题是我在 Springboard
  • Spring Web 服务框架中的流式传输 MTOM Web 服务

    我想使用 MTOM 和 Spring WS 将大文件从服务器发送到客户端 我意识到这不是处理此类事情的最佳方法 但这是一个要求 我设置了 MTOM 它非常适合 50mb 左右的小文件 我遇到较大文件的内存不足错误 通过更改不同的堆空间大小
  • Angular6:如何从命令行生成默认的 angular.json 文件[重复]

    这个问题在这里已经有答案了 我使用 Angular 6 创建一个新模块 它将作为一个包在另一个项目中使用 现在 我正在尝试配置 karma 和 jasmine 以便我可以在其上创建单元测试 问题是我发现这个项目没有任何angular jso
  • 运行以下 Playbook 语法似乎是正确的,但出现以下错误!-“blockinfile”不是 Play 的有效属性

    运行以下 Playbook 语法似乎是正确的 但出现以下错误 ERROR blockinfile is not a valid attribute for a Play The error appears to have been in r
  • 浏览器如何识别登录表单?

    我想知道 浏览器如何识别不同站点中的登录表单 无论我是否访问我的 GMail 帐户或某些个人项目 IE Firefox 总是知道该页面包含登录信息 他们是否得出结论 简单地搜索输入类型 密码 或者涉及一些 cookie 信息 先感谢您 Fi
  • 将 HH:MM:SS 除以整数

    我有一个专栏 Col1 格式为HH MM SS 和一个整数列Col2 我正在尝试计算Col1 Col2在格式中HH MM SS 我怎样才能做到这一点 我尝试过使用转换函数 但是下面的查询忽略了隐藏的值 这是我使用的 Convert 语句 C
  • 如何使用Java自带的解析器从HTML中提取信息?

    我不想下载任何其他库 我正在谈论这个 javax swing text html HTMLEditorKit Parser 如何使用此解析器提取页面中的重复信息 举例来说 我在页面中重复了以下代码 tr td class info1 get