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

Ozz*_*zzy 3 java html-parsing

我不想下载任何其他库,我正在谈论这个: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>
Run Code Online (Sandbox Code Playgroud)

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

提前致谢。

Mat*_*hen 5

它是一个流解析器,因此在解析时它会告诉您它命中了什么。您应该扩展HTMLEditorKit.ParserCallback一些类(我将其称为Parser),然后重写您关心的方法。

我相信它只适用于“swing 中的 html dtd”(请参见此处)。如果您正在做任何更复杂的事情,建议您使用外部 Java HTML 解析库,例如我之前链接到的库之一。

这是基本代码(演示):

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);
        }
}
Run Code Online (Sandbox Code Playgroud)