0

最近、Jsoup をいじっています。私の友人はディアブロのために金を買うのが大好きなので、彼ができるだけお金をかけないように、さまざまなウェブサイトから価格を取得して提示する小さなプログラムを彼に作ろうと思いました. 通常、このような価格を取得できます。

Document Fasteve;

    try {

        Fasteve = Jsoup.connect("http://www.fasteve.com/diablo-3/Gold/?st=US(Normal)").get();
        Elements Price = Fasteve.select("table[class=table_2] tr:eq(5) td:eq(1)");

        System.out.println("http://www.fasteve.com/diablo-3/Gold/?st=US(Normal)");
        System.out.println("1000M Gold = " + Price.text());

    } catch (IOException e) {
        e.printStackTrace();
    }

しかし、私はその方法を使用することはできません。また、取得元の tr と td を指定するメソッドも使用できません。このサイトでは、すべての tr が同じクラスであるため、呼び出すことができません。

Elements Price = Fasteve.select("table[class=table] tr[class=row] td:[class=column]");

データを取得しているテーブル

その値を取得する方法について何か考えはありますか? (64.37) もう一度ありがとう、Stackoverflow。

4

1 に答える 1

1

検討

  • td1 文字列と td2 または価格文字列を保持するクラスを作成します。たとえば、DiabloGoldRow などと呼びましょう。
  • このクラスの Collection を作成しArrayList<DiabloGoldRow>ますHashMap<String, DiabloGoldRow>
  • 次に、JSoup を使用してテーブル内の情報を分離し、for ループで反復処理して、DiabloGoldRow オブジェクトのインスタンスを作成し、それらを ArrayList または他のコレクション (つまり、HashMap) に配置します。

コードの詳細は学生の演習として残しておきます。

編集
あなたが尋ねる、

変数を保持するために別のクラスを作成する必要があるのはなぜですか?

各行に保持されている 2 つの情報を近くに保持する必要があり、一方を検索して他方を取得する必要がある場合があるためです。2D 配列や並列配列を使用するよりも、この方法で行う方がはるかにクリーンです。これを行うことに対するあなたの異議は何ですか?

編集2
あなたは述べます、

私は何にも反対していません。それが必要な値を取得するのにどのように役立つのか疑問に思っています。私の質問は、私が通常行っている方法を使用していましたが、必要なデータを取得できません。指定されたデータを取得するための別の構文を探していました。

繰り返しますが、これを for ループで行う 1 つの方法です。テーブルの行をループするだけです。

  Elements eles = doc.select("table tr");

  for (int i = 0; i < eles.size(); i++) {
     Elements rowEles = eles.get(i).select("form");

     Elements goldEles = rowEles.select("[name=gold]");
     String goldValue = goldEles.attr("value");

     Elements priceEles = rowEles.select("[name=price]");
     String priceValue = priceEles.attr("value");

     System.out.printf("%-7s: %-5s%n", goldValue, priceValue);
  }
于 2013-03-22T00:12:29.710 に答える