2017-04-18 1 views
-1

J'écris une application Android et essayer de comprendre comment dois-je construire mon appel pour obtenir des données de table à partir de cette page: http://uk.soccerway.com/teams/scotland/saint-mirren-fc/1916/squad/Comment puis-je extraire table avec JSOUP

J'ai lu le livre de cuisine du site JSOUP mais parce que je n'ai pas utilisé cette bibliothèque avant que je ne sois coincé. Je suis venu avec quelque chose comme ceci:

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"); 

Comme vous pouvez le voir, je suis loin d'avoir encore des statistiques sur les joueurs. Je pense que la prochaine étape devrait être de pointer un nouvel objet Element vers la balise "tbody" à l'intérieur de la "table squad sortable"? Je sais que je devrai utiliser pour la boucle une fois que je parviens à lire la table, puis lire chaque ligne à l'intérieur de la boucle.

Malheureusement, la structure de la table est un peu complexe pour quelqu'un qui n'a aucune expérience, donc j'apprécierais vraiment quelques conseils!

Répondre

0

Fondamentalement, chaque rangée a le sélecteur suivant -
X #page_team_1_block_team_squad_3-table > tbody:nth-child(2) > tr:nth-child(X) où est le numéro de la rangée (à partir de 1).
Une façon est de parcourir les lignes et extraire l'info:

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); 

Cela affichera le numéro et le nom de chaque joueur. Comme je ne veux pas compter le nombre de lignes (et que le programme reste flexible pour les changements), j'utilise la boucle do...while - je vais répéter que la ligne existe (ou n'est pas vide).
La sortie j'obtenir:

1 J. Langfield 21 B. O'Brien 28 R. Willison 2 S. Demetriou 3 G. Irvine 4 A. Webster ...

Utilisez les outils de développement de votre navigateur pour obtenir les noms des autres colonnes et utilisez-les pour obtenir toutes les informations dont vous avez besoin.