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>,或者如果您希望能够基于 td1 字符串快速获取信息, a HashMap<String, DiabloGoldRow>
  • 然后使用JSoup对表中的信息进行隔离,然后在for循环中对其进行迭代,创建DiabloGoldRow对象的实例并将它们放入ArrayList或其他集合(即HashMap)中。

我将把代码的细节留给学生练习。

编辑
你问,

为什么我需要创建一个单独的类来保存变量?

因为您需要将每行中的两条信息保持在一起,并且可能需要搜索其中一条以获得另一条。这样做比使用二维数组或并行数组要干净得多。你反对这样做的理由是什么?

编辑 2
你说,

我不反对任何事情。我只是想知道这将如何帮助我获得我需要的价值观。我的问题是使用我通常使用的方法,我无法获取我想要的数据。我只是在寻找一种不同的语法来获取指定的数据。

同样,您可以使用 for 循环执行此操作的一种方法。只需遍历表的行:

  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 回答