2013-03-21 61 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