我需要从新闻网页中提取主要内容(不包括链接,广告等)。我已经在网上阅读了它并且知道要做到这一点我需要解析html页面然后从html中选择内容我编写了一个代码,它将一个html文件作为输入,并使用java.swing中提供的Htmleditorkit从网页中提取文本。*。
import java.io.IOException;
import java.io.FileReader;
import java.io.Reader;
import java.util.List;
import java.util.ArrayList;
import javax.swing.text.html.parser.ParserDelegator;
import javax.swing.text.html.HTMLEditorKit.ParserCallback;
import javax.swing.text.html.HTML.Tag;
import javax.swing.text.MutableAttributeSet;
public class HTMLUtils {
private HTMLUtils() {}
public static List<String> extractText(Reader reader) throws IOException {
final ArrayList<String> list = new ArrayList<String>();
ParserDelegator parserDelegator = new ParserDelegator();
ParserCallback parserCallback = new ParserCallback() {
@Override
public void handleText(final char[] data, final int pos) {
list.add(new String(data));
}
@Override
public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) { }
@Override
public void handleEndTag(Tag t, final int pos) { }
@Override
public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { }
@Override
public void handleComment(final char[] data, final int pos) { }
@Override
public void handleError(final java.lang.String errMsg, final int pos) { }
};
parserDelegator.parse(reader, parserCallback, true);
return list;
}
public static void main(String[] args) throws Exception{
FileReader reader = new FileReader("C://Users//Mukul//Desktop//demo.html");
List<String> lines = HTMLUtils.extractText(reader);
for (String line : lines) {
System.out.println(line);
}
}
}
但我的问题是我无法弄清楚如何只从网页中选择主要内容,例如新闻网页上的文章。
另外,我想知道我正在解析的方式很好,或者我应该使用一些开源库,如Jsoup,Jtidy等。为了同样的事情。
请帮助我并纠正我在哪里做错了。
答案 0 :(得分:0)
你有两个问题,一个是获取页面内容(我猜是语法),我会使用下面的习语:(不是你发布的代码有点严重错误,对我来说有点过于冗长味)
String text = new Scanner( new URL("C://Users//Mukul//Desktop//demo.html").openConnection().getInputStream()).useDelimiter("\\A").next();
另一个是解释你刚读过的字符串(语义)。我不认为这是一个正确的答案,但如果你想要每次解析它的一个页面,它应该有一些固定的布局。你必须找到一些模式来区分主要内容与广告,标题,链接等,然后你可以使用正则表达式提取它。