1

除了我之前的问题:Extended a basic web crawler to filter status codes and HTML 之外,我正在尝试使用以下方法从 HTML 标记中提取信息,在本例中为“标题”:

public static void parsePage() throws IOException, BadLocationException 
{
    HTMLEditorKit kit = new HTMLEditorKit();
    HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
    doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
    Reader HTMLReader = new InputStreamReader(testURL.openConnection()
            .getInputStream());
    kit.read(HTMLReader, doc, 0);

    // Create an iterator for all HTML tags.
    ElementIterator it = new ElementIterator(doc);
    Element elem;

    while ((elem = it.next()) != null) 
    {
        if (elem.getName().equals("title")) 
        {
            System.out.println("found title tag");
        }
    }
}

就告诉我它找到了标签而言,这是有效的。我正在努力解决的是如何提取它们之后/内部包含的信息。

我在网站上发现了这个问题:Help with Java Swing HTML parsing,但是它声明它只适用于格式良好的 HTML。我希望有另一种方法。

任何指针表示赞赏。

4

2 回答 2

3

尝试使用乔德

Jerry jerry = jerry().enableHtmlMode().parse(html);
...

HtmlParser

Parser parser = new Parser(htmlInput);
CssSelectorNodeFilter cssFilter = new CssSelectorNodeFilter("title");
NodeList nodes = parser.parse(cssFilter);
于 2012-07-14T21:24:02.447 回答
1

事实证明,将方法更改为此会产生所需的结果:

    {
            HTMLEditorKit kit = new HTMLEditorKit();
            HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
            doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
            Reader HTMLReader = new InputStreamReader(testURL.openConnection().getInputStream());
            kit.read(HTMLReader, doc, 0);
            String title = (String) doc.getProperty(Document.TitleProperty);
            System.out.println(title);
    }

我想我对迭代器/元素的东西大发雷霆。

于 2012-07-14T21:57:23.507 回答