获取要在jSoup中使用的String的某些Table引用

时间:2014-10-29 22:40:12

标签: java jsoup

我想用jSoup从这个网页上抽出时间...我需要的时间是" 11:19"在顶部附近的红色栏中...... http://www.gbgb.org.uk/resultsRace.aspx?raceID=293047-2

有人知道如何使用jSoup从网页上获取此信息吗?如果有人对将来如何在表格中找到元素有任何建议,请你告诉我。

另外,我需要参加"观看比赛"此表中的链接地址:http://www.gbgb.org.uk/raceCard.aspx?dogName=Ballymac%20Monleek,但是当我目前获得该元素时,它只是给了我" View Race"而不是实际的链接...

 //getHistory
    String dogPage = "http://www.gbgb.org.uk/raceCard.aspx?dogName=" + selectedDog;
    Document doc1 = Jsoup.connect(dogPage).get();

    Element tblHeader = doc1.select("table.MasterTable_Web20 tbody").first();
    List<DogDetail> data = new ArrayList<>();
    for (Element element1 : tblHeader.children()){

        String webURL = (element1.select("td:eq(14)").text());
        System.out.println(webURL);
    }

谢谢,

罗布

1 个答案:

答案 0 :(得分:1)

这是一个非常快速的方法(可能不是最好的,但它有效,我只是测试了它)。

使用chrome,可以很容易地为网页中的每个元素获取XPath表达式(右键单击文本,“检查”,复制XPath表达式)。在这种情况下,它是:

 //*[@id="content"]/table[2]/tbody/tr[2]/td/table/tbody/tr/td[2]/table[1]/tbody/tr/td[4]

现在,如果页面结构永远不会改变,那就足够了。使用Xsoup extension将XPath表达式与Jsoup一起使用:

        Document document = Jsoup.connect("http://www.gbgb.org.uk/resultsRace.aspx?raceID=293047-2").get(); 
        XElements element = Xsoup.compile("//*[@id=\"content\"]/table[2]/tbody/tr[2]/td/table/tbody/tr/td[2]/table[1]/tbody/tr/td[4]").evaluate(document);

        // Get text content
        String textContent = element.getElements().get(0).childNode(0).toString();

        // Extract time portion
        String time = textContent.trim().replaceAll("\\&nbsp\\;", " ").split("\\s+")[1];

        // Prints 11:19
        System.out.println(time);

当然,请注意,这对未来可能的页面结构变化非常敏感。

对于问题的第二部分,您将获得这组xpath

*[@id="ContentPlaceHolder1_RadGrid1_ctl00__0"]/td[15]/a
*[@id="ContentPlaceHolder1_RadGrid1_ctl00__1"]/td[15]/a
*[@id="ContentPlaceHolder1_RadGrid1_ctl00__2"]/td[15]/a
...
*[@id="ContentPlaceHolder1_RadGrid1_ctl00__15"]/td[15]/a

简单的迭代很容易就能得到它们。