0

Jsoup で Web ページをスクレイピングするのに助けが必要です。hcfactions Web ページからプレイヤー プロファイルを解析し、キルとデスを収集したいと考えています。私が直面している問題は、各プロファイル ページが動的に作成され、プレイヤーがキルまたはデスした場合にのみテーブルが表示されることです。そのため、どのテーブルを解析しているかを知るために、呼び出し後に設定されたヘッダー テキストを取得する必要があります。

Web ページの例: http://www.hcfactions.net/index.php?action=playerinfo&player=Djmaddox .

以下は、私がスクレイピングしている Web ページの html セグメントです。

<table class='table-bordered'><h2 style='text-align:center'>Deaths</h2>
    <tr><td>Date</td><td>Reason</td><td>Details</td></tr><tr><td>Dec 11 5:27pm CST</td>.....

テーブルをプルしてエントリをカウントするこのコードがありますが、選択するためにh2タグをプルしません。

public void getPlayerDetails(String name) {
        String data = "";
        Avatar temp = _db.getPlayer(name);
        playerUrl = "http://www.hcfactions.net/index.php?action=playersearch&player=" + name;
        try {
//            data = Jsoup.connect(url)
//                    .url(url).get().html();
            playerDoc = Jsoup.connect(playerUrl).get();
        } catch (IOException ex) {
            Logger.getLogger(JParser.class.getName()).log(Level.SEVERE, null, ex);
        }
        if (playerDoc.select("table").size() == 1) {
            return;
        } else if (playerDoc.select("table").size() >= 2) {

            for (int x = 1; x < playerDoc.select("table").size(); x++) {

                System.out.println("deaths");
                Element table = playerDoc.select("table").get(x);
                Iterator<Element> ite = table.select("tr").iterator();
                int count = 0;
                while (ite.hasNext()) {
                    data = ite.next().text();
                    count++;
                }

                if (count > 0) {
                    temp.setDeaths(count - 1);
                }


            }

        }
    }
4

3 に答える 3

0

Elements headers=playerDoc.select("div.span10.offset1 h2");
私見あなたの選択は少し複雑すぎるように見えますが、おそらくそのようにする必要があります. とにかく、上記のスニペットは、適切なコンテナーに存在するすべての H2 タグを取得します。後で、そのような必要なテーブルを選択し
Elements tables=playerDoc.select("div.span10.offset1 table");
、それらに適切なデータ掘り下げを適用できます。ヘッダーは、テーブル ofc に対応する順序になります。私の仕事はここで終わったと思います:)

于 2013-08-06T08:52:38.680 に答える
0

タグ<h2>の位置が無効です。それがJSoupが見つけられない理由だと思います。正規表現で自分で抽出する必要があります。<h2>次のコードを使用して、のコンテンツを取得できます。

String tableToString = "<table class='table-bordered'><h2 style='text-align:center'>Deaths</h2>" + "<tr>" + "<td>Date</td>" + "<td>Reason</td>" + "<td>Details</td>" + "</tr>" + "</table>";
String regex = "<h2.*>(.*)?</h2>";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(tableToString);
if (matcher.find()) {
    System.out.println(matcher.group(1));
}

コードからinit できtableToStringますtable.toString()

于 2012-12-21T17:02:23.070 に答える
0

ka3ak が言うように、の位置<h2>がずれています。しかし、そのために正規表現に頼るとしてパーサーを放棄する必要はありません。JSoup が適切な HTML パーサーであると仮定すると (自分で使用したことはありません)、<h2>要素は要素の直前の要素である必要があり<table>ます。「select」ステートメントを取得して、そこで探します。

于 2012-12-21T17:18:34.230 に答える