我正在尝试打印“https://www.worldcoinindex.com/”表格中的行。从Chrome的inspect元素我可以看到tableID =“myTable”。但是,当我尝试执行select table方法时,它返回一个Index out of bounds exception。我可以使用getElementsByClass打印单个行,所以我知道它正在查找网站。我做错了什么?
这是我的代码:
import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class ParseTable {
public static void main(String args0[]) throws IOException {
Document doc;
Elements elements;
String url="https://www.worldcoinindex.com/";
doc = Jsoup.connect(url).get();
Element table = doc.select("myTable").get(0); //Select table
Elements rows = table.select("tr"); // Select tr's
System.out.println(table.select("tr"));
for (int j=1; j > rows.size(); j++) { // Iterate through table data
System.out.println(rows.get(j).select("td"));
}
}
}
这是我的错误:
线程“main”中的异常java.lang.IndexOutOfBoundsException:索引:0,大小:0 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.get(ArrayList.java:429) 在ParseTable.main(ParseTable.java:19)
答案 0 :(得分:0)
我不熟悉jsoup,但你的for循环看起来不对。
尝试从0开始,并检查j是否小于row.size()
for (int j = 0; j < rows.size(); j++) {
System.out.println(rows.get(j).select("td"));
}
答案 1 :(得分:0)
如果您运气不好,所有数据都是使用ajax等异步提供的,并且在此数据为#34;之前,您的抓取就会发生在网站上#34;。
在调试器中检查你真正得到的doc
- 这会告诉你多少。
如果您需要库存数据,谷歌搜索API - 有些存在。搜索SO也有一些关于它的线索。也许https://bitcoin.stackexchange.com/会是更好的地方。
您的错误来自
Element table = doc.select("myTable").get(0);
你假设是一个名为&#34; myTable&#34;的元素。并且访问它,如果没有,则发生异常。在访问之前测试结果选择。
编辑:
如果您想按ID选择内容,请在其前面添加#
:
Element table = doc.select("#myTable").get(0);
您需要在#
之前为id添加前缀.
作为类。
请参阅:https://jsoup.org/cookbook/extracting-data/selector-syntax