收集

内的文本从 html 页面

发布于 2024-10-07 11:09:11 字数 1142 浏览 6 评论 0原文

我有一个博客数据集,其中包含大量博客页面,包含博客文章、评论和所有博客功能。 我只需要从此集合中提取博客文章并将其存储在 .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();
        }
    }
}

提前致谢

I have a blog dataset which has a huge number of blog pages, with blog posts, comments and all blog features.
I need to extract only blog post from this collection and store it in a .txt file.
I need to modify this program as this program should collect blogposts tag starts with <p> and ends with </p> and avoiding other tags.

Currently I use HTMLParser to do the job, here is what I have so far:

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

thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逆流 2024-10-14 11:09:11

如果 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 标签。

Provided the HTML is well formed, the following method should do what you need:

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

EDIT: Change to handle nested P tags.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文