使用标准java从HTML段中提取文本

时间:2012-07-12 07:36:53

标签: java

我收到一段HTML文档作为Java String,我想提取它的内部文本。 例如:你好世界 ---->你好世界

有没有办法使用java标准库提取文本? 有些东西可能比打开/关闭标签正则表达式更有效吗? 感谢,

4 个答案:

答案 0 :(得分:2)

不要使用正则表达式来解析HTML,而是使用像HtmlCleaner这样的专用解析器。

使用正则表达式通常会在第一次测试时起作用,然后开始越来越复杂,直到它无法适应为止。

答案 1 :(得分:2)

Don't use regular expression to parse HTML,例如jsoup: Java HTML Parser。它有一种从DOM中选择元素的便捷方式。

  

示例   获取Wikipedia主页,将其解析为DOM,并从“新闻”部分中选择元素列表中的标题:

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

JDK中还有一个HTML解析器:javax.swing.text.html.parser.Parser,可以像这样应用:

Reader in = new InputStreamReader(new URL(webpageURL).openConnection().getInputStream());
ParserDelegator parserDelegator = new ParserDelegator();
parserDelegator.parse(in, harvester, true);

然后,取决于您要查找的类型:开始标记,结束标记,属性等,您定义适当的回调函数:

@Override
public void handleStartTag(HTML.Tag tag,
        MutableAttributeSet mutableAttributeSet, int pos) {

    // parses the HTML document until a <a> or <area> tag is found
    if (tag == HTML.Tag.A || tag == HTML.Tag.AREA) {

        // reading the href attribute of the tag
        String address = (String) mutableAttributeSet
                .getAttribute(Attribute.HREF);

    /* ... */

答案 2 :(得分:2)

我也会说 - 不要在HTML中使用正则表达式。 ; - )

您可以使用JTidy进行拍摄。

答案 3 :(得分:1)

您可以使用HTMLParser,这是一个开源。