【问题标题】:Parsing HTML in web crawler在网络爬虫中解析 HTML
【发布时间】:2012-07-14 06:53:37
【问题描述】:

关于我之前的问题:Extending 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。 我希望有另一种方法。

任何指针表示赞赏。

【问题讨论】:

    标签: java html html-parsing web-crawler


    【解决方案1】:

    尝试使用Jodd

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

    HtmlParser

    Parser parser = new Parser(htmlInput);
    CssSelectorNodeFilter cssFilter = new CssSelectorNodeFilter("title");
    NodeList nodes = parser.parse(cssFilter);
    

    【讨论】:

    • 谢谢阿列克谢。有没有办法在不使用外部库的情况下做到这一点?
    • 如果您需要一个快速而简单的一次性解决方案,您可以使用正则表达式提取标题,但通常避免对 HTML 使用正则表达式
    • 是的,我知道使用正则表达式解析 HTML 是不受欢迎的。在这种情况下,我只需要“标题”信息。
    • 在这种情况下,考虑到你不喜欢有额外的依赖,我会用一个简单的正则表达式。
    【解决方案2】:

    结果将方法更改为此会产生所需的结果:

        {
                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);
        }
    

    我想我对迭代器/元素的东西很感兴趣。

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 2018-01-26
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多