【问题标题】:collecting text within <p> from html pages从 html 页面收集 <p> 中的文本
【发布时间】:2011-09-15 18:06:19
【问题描述】:

我有一个博客数据集,其中包含大量博客页面,包括博客文章、cmets 和所有博客功能。 我只需要从此集合中提取博客文章并将其存储在 .txt 文件中。 我需要修改这个程序,因为这个程序应该收集以 p> 开头并以 /p> 结尾的博文标签,并避免使用其他标签。

目前我使用 HTMLParser 来完成这项工作,这是我目前所拥有的:

import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.tags.MetaTag;
public class HTMLParserTest {

    public static void main(String... args) {
        Parser parser = new Parser();

        HasAttributeFilter filter = new HasAttributeFilter("P");
        try {
            parser.setResource("d://Blogs/asample.txt");
            NodeList list = parser.parse(filter);
            Node node = list.elementAt(0);
            if (node instanceof MetaTag) {
                MetaTag meta = (MetaTag) node;
                String description = meta.getAttribute("content");
                System.out.println(description);  
            }

        } catch (ParserException e) {
            e.printStackTrace();
        }
    }
}

提前致谢

【问题讨论】:

    标签: java html text-processing html-parsing


    【解决方案1】:

    如果 HTML 格式正确,以下方法应该可以满足您的需要:

        private static String extractText(File file) throws IOException {
        final ArrayList<String> list = new ArrayList<String>();
        FileReader reader = new FileReader(file);
    
        ParserDelegator parserDelegator = new ParserDelegator();
        ParserCallback parserCallback = new ParserCallback() {
            private int append = 0;
            public void handleText(final char[] data, final int pos) { 
                if(append > 0) {
                    list.add(new String(data));
                }
            }
            public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) {
                if (Tag.P.equals(tag)) {
                    append++;
                }
            }
            public void handleEndTag(Tag tag, final int pos) {  
                if (Tag.P.equals(tag)) {
                    append--;
                }
            }
            public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { }
            public void handleComment(final char[] data, final int pos) { }
            public void handleError(final java.lang.String errMsg, final int pos) { }
        };
        parserDelegator.parse(reader, parserCallback, false);
        reader.close();
    
        String text = "";
        for(String s : list) {
            text += " " + s;
        }       
    
        return text;
    }
    

    编辑:更改为处理嵌套的 P 标签。

    【讨论】:

    • 感谢库尔特,您的回复。我已经使用 htmlparser 进行了练习。所以,无论如何,我可以使用 HTMLparser 修改您的上述代码。这将非常有帮助。谢谢
    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2016-02-07
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多