2013-03-21 57 views
0

最近我一直在与Jsoup搞混。我的朋友喜欢为暗黑破坏神购买黄金,所以我认为我会让他成为一个小程序,从各种网站获取价格并呈现给他,这样他就可以尽可能少花钱。通常,我可以像这样获得价格;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]"); 

The table I am grabbing data from

任何我怎么才能抓住这个价值? (64.37) 再次感谢Stackoverflow。

回答

1

考虑

  • 创建持有的TD1字符串和TD2或价格串类,比如说我们称之为DiabloGoldRow或一些,这样的。
  • 创建此类的集合,如ArrayList<DiabloGoldRow>,或者如果您希望能够快速获取基于td1字符串的信息,请拨打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); 
    } 
+0

为什么我需要创建一个单独的类来保存变量? – 2013-03-22 00:36:53

+0

@JoshBeckwith:请参阅编辑回答。 – 2013-03-22 00:40:24

+0

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