2017-04-18 86 views
-1

我正在写一个Android应用程序,并试图找出我应该怎么构建我的电话从该网页获得表数据:http://uk.soccerway.com/teams/scotland/saint-mirren-fc/1916/squad/我如何可以提取表JSOUP

我读过从JSOUP网站的食谱但是因为在我陷入困境之前我还没有使用过这个库。我想出了这样的事情:

doc = Jsoup.connect("http://uk.soccerway.com/teams/scotland/saint-mirrenfc/1916/squad/").get(); 
Element squad = doc.select("div.squad-container").first(); Element 
Elements table = squad.select("table squad sortable"); 

正如你所看到的我没有接近球员的统计数据。我认为下一步应该是将新的Element对象指向“表格可排序”内的“tbody”标签? 我知道我将不得不使用循环,一旦我设法读取表,然后读取循环内的每一行。

不幸的是,对于没有经验的人来说,表格结构有点复杂,所以我会非常感谢一些建议!

回答

0

基本上每行都有以下选择器 -
#page_team_1_block_team_squad_3-table > tbody:nth-child(2) > tr:nth-child(X)其中X是行号(从1开始)。
一种方法是遍历行并提取信息:

String url = "http://uk.soccerway.com/teams/scotland/saint-mirren-fc/1916/squad/"; 
String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"; 
Document doc = null; 
try { 
    doc = Jsoup.connect(url) 
      .userAgent(userAgent) 
      .get(); 
} catch (IOException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} 
int i = 1; 
Elements row; 
do { 
    row = doc.select("#page_team_1_block_team_squad_3-table > tbody:nth-hild(2) > tr:nth-child(" + i + ")"); 
    for (Element el : row) { 
     System.out.print(el.select(".shirtnumber").text() + " "); 
     System.out.println(el.select(".name").text()); 
     i++; 
    } 
} while (row != null); 

这将打印每个球员的号码和姓名。由于我不想计算行数(并且保持程序易于修改),所以我更愿意使用do...while循环 - 我将按行存在(或不为空)迭代。
输出I得到:

1 J. Langfield 21 B.奥布莱恩 28 R.威利森 2 S. DEMETRIOU 3 G.欧文 4 A.韦伯斯特 ...

使用浏览器的开发人员工具获取其他列的名称,并使用它获取所需的所有信息。