我想用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);
}
谢谢,
罗布
答案 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("\\ \\;", " ").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
简单的迭代很容易就能得到它们。