我最近一直在和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。
答案 0 :(得分:1)
考虑
ArrayList<DiabloGoldRow>
,或者如果您希望能够根据td1字符串快速获取信息,HashMap<String, DiabloGoldRow>
。我会将代码的详细信息留给学生练习。
修改强>
你问,
为什么我需要创建一个单独的类来保存变量?
因为您需要将每行上的两条信息保持在一起,并且可能需要搜索一行以获取另一条信息。这样做比使用2D数组或并行数组要干净得多。你对此有何异议?
编辑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);
}