1

ニュース Web ページからメイン コンテンツ (リンク、広告などを除く) を抽出する必要があります。Web でそれについて読んだことがありますが、そのためには html ページを解析し、html タグからコンテンツを選択する必要があることを知りました。 java.swing.* で利用可能な Htmleditorkit を使用して、html ファイルを入力として受け取り、Web ページからテキストを抽出するコードを作成しました。

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

しかし、私の問題は、ニュース Web ページの記事のように Web ページからメイン コンテンツのみを選択する方法を理解できないことです。

また、構文解析の方法に問題がないか、または Jsoup、Jtidy などのオープン ソース ライブラリを使用する必要があるかを知りたいです。同じことのために。

私を助けて、私が間違っているところを修正してください。

4

1 に答える 1

0

さて、あなたには2つの問題があります.1つはページの内容を取得することです(構文的に推測します)。そのために、次のイディオムを使用します:

String text = new Scanner( new URL("C://Users//Mukul//Desktop//demo.html").openConnection().getInputStream()).useDelimiter("\\A").next();

もう 1 つは、読み取ったばかりの文字列を解釈することです (セマンティック)。正解は 1 つではないと思いますが、毎回解析したいページが 1 つだけの場合は、レイアウトを固定する必要があります。メインコンテンツを広告、ヘッダー、リンクなどと区別するためのパターンを見つける必要があります。その後、正規表現を使用して抽出できる場合があります。

これを確認してください:http://code.google.com/p/boilerpipe/

于 2012-02-17T18:36:31.937 に答える