сбор текста в пределах <p>со страниц HTML - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть набор данных блога, который содержит огромное количество страниц блога, с сообщениями в блоге, комментариями и всеми функциями блога.Мне нужно извлечь только блог из этой коллекции и сохранить его в .txt файле.Мне нужно изменить эту программу, так как эта программа должна собирать тег blogposts, начиная с <<strong> p> и заканчивая <<strong> / 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();
        }
    }
}

заранее спасибо

1 Ответ

1 голос
/ 13 декабря 2010

При условии, что 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...