Jsoup - 无法选择表格

时间:2018-01-21 18:00:45

标签: jsoup

我正在尝试打印“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)

2 个答案:

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