Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提取表标题,然后添加到表中所有记录的数组列表中_Java_Html_For Loop_Jsoup - Fatal编程技术网

Java 提取表标题,然后添加到表中所有记录的数组列表中

Java 提取表标题,然后添加到表中所有记录的数组列表中,java,html,for-loop,jsoup,Java,Html,For Loop,Jsoup,我目前正在从以下网站上抓取分数:并将其存储在四个数组列表中 以下是获取表内容的代码: for (Element table : doc.select("table:first-of-type")) { for (Element row : table.select("tr")) { Elements td = row.select("td");

我目前正在从以下网站上抓取分数:并将其存储在四个数组列表中

以下是获取表内容的代码:

for (Element table : doc.select("table:first-of-type")) { 
                         for (Element row : table.select("tr")) {
                              Elements td = row.select("td"); 
                              List1.add(td.get(0).text());
                              List2.add(td.get(1).text());
                              List3.add(td.get(2).text());
                              List4.add(td.get(3).text());
                         }
                    }
我将得到以下结果:

List 1: [Worcester, Sale, Ulster]
List 2: [22 - 23, 24 - 19, 10 - 7]
List 3: [Leicester, Gloucester, Ospreys]
List 4: [Full Time, Full Time, Full Time]
但是由于所有的分数都与不同比赛的分数一起显示。现在我想解析英杰华英超联赛中包含的锦标赛名称

- 例如,Aviva超级联赛将有两个结果,然后是Rabodirect Pro12的一个结果。因此,对于前两个结果,Aviva Premiership将添加到数组列表中,然后对于下一个结果,将添加Rabodirect Pro12

以下是我目前的尝试:

 Document doc = Jsoup
                  .connect("http://www.bbc.co.uk/sport/rugby-union/results") 
                  .timeout(5000)
                  .get();

      for (Element pTag : doc.select("p[class=table-description]")) {
           List1.add(pTag.text());

           for (Element row : doc.select("tr")) {
                     Elements td = row.select("td"); 

                     List2.add(td.get(0).text());
                     List3.add(td.get(1).text());
                     List4.add(td.get(2).text());
                     List5.add(td.get(3).text());
                }
但这只会解析每一个结果,我似乎无法在进入下一个锦标赛名称之前解决如何将其添加到每个结果中的问题

从我当前的示例中可以看到所需的输出:

List 5: [Aviva Premiership, Aviva Premiership, RaboDirect Pro12]

我认为应该使用
div.table-table-stats
元素作为起点,并对它们进行迭代。在循环中,您可以使用表作为起点来获取联赛名称,然后是tr元素。为了在正确的列表索引中重复每场比赛的联赛信息,您需要放置
list1.add(dataTable.select(“p.table-description”).text())在内部循环中

如果你想包括比赛的当天,你可以使用类似的方法一级

Document doc = Jsoup
            .connect("http://www.bbc.co.uk/sport/rugby-union/results") 
            .timeout(5000)
            .get();

List<String> list1 = new ArrayList<String>(); //league name
List<String> list2 = new ArrayList<String>(); 
List<String> list3 = new ArrayList<String>();
List<String> list4 = new ArrayList<String>();
List<String> list5 = new ArrayList<String>();

for (Element dataTable : doc.select("div.table-table-stats")) {

    for (Element row : dataTable.select("tr")) {
           Elements td = row.select("td"); 
           list1.add(dataTable.select("p.table-description").text());
           list2.add(td.get(0).text());
           list3.add(td.get(1).text());
           list4.add(td.get(2).text());
           list5.add(td.get(3).text());
    }
}
System.out.println(list1);
System.out.println(list2);
System.out.println(list3);
System.out.println(list4);
System.out.println(list5);
Document doc=Jsoup
.连接(“http://www.bbc.co.uk/sport/rugby-union/results") 
.超时(5000)
.get();
List list1=新的ArrayList()//联盟名称
List list2=新的ArrayList();
List list3=新的ArrayList();
List list4=新的ArrayList();
List list5=新的ArrayList();
对于(元素数据表:doc.select(“div.table-table-stats”)){
对于(元素行:dataTable.select(“tr”)){
元素td=行。选择(“td”);
列表1.add(dataTable.select(“p.table-description”).text());
list2.add(td.get(0.text());
list3.add(td.get(1.text());
list4.add(td.get(2.text());
list5.add(td.get(3.text());
}
}
System.out.println(列表1);
System.out.println(列表2);
System.out.println(列表3);
System.out.println(列表4);
System.out.println(列表5);

PS:你应该考虑用一个游戏的数据填充一个助手对象。使用多个列表似乎是一个糟糕的设计选择。

您的问题解决了吗?