我想使用jSoup从该网页获取时间...我需要的时间是顶部附近红色栏中的“11:19”... http://www.gbgb.org.uk/resultsRace.aspx?raceID=293047-2
有人知道我如何使用 jSoup 从网页获取这个吗?如果有人对将来如何在表格中定位元素有任何建议,请告诉我。
另外,我需要从此表中获取“查看比赛”链接地址:http://www.gbgb.org.uk/raceCard.aspx?dogName=Ballymac%20Monleek ,但是当我当前获取该元素时,它只是给我“查看比赛”而不是实际的链接......
//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);
}
谢谢
抢
最佳答案
这是一种非常快速的方法(可能不是最好的,但它有效,我刚刚测试过)。
使用 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);
当然,请注意,这对页面结构 future 可能发生的变化非常敏感。
对于问题的第二部分,您将获得这组 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
简单的迭代就可以轻松获得所有这些。
关于java - 获取要在 jSoup 中使用的字符串的某些表引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641888/