【问题标题】:jSoup get data using td-class tags from webpagejSoup 使用网页中的 td-class 标签获取数据
【发布时间】:2014-11-03 20:52:50
【问题描述】:

我想使用 jSoup 从http://www.futbol24.com/Live/?__igp=1&LiveDate=20141104 获取数据。我知道如何使用 jSoup - 但我发现很难确定我需要的数据。

我想要 tbody 表每一行的时间、主队和客队。所以第一行的输出应该是:

08:30     Persipura Jayapura      Pelita Bandung Raya

我可以将每个元素的 td 类视为“status alt”、“home”和“guest”。

目前我已经尝试了以下,但它似乎没有输出任何东西......我做错了什么?

        matches = new ArrayList<Match>();

             //getHistory
            String website = "http://www.futbol24.com/Live/?__igp=1&LiveDate=20141104";
            Document doc = Jsoup.connect(website).get();

            Element tblHeader = doc.select("tbody").first();
            List<Match> data = new ArrayList<>();
            for (Element element1 : tblHeader.children()){

                Match match = new Match();
                match.setTimeOfMatch(element1.select("td.status.alt").text());
                match.setAwayTeam(element1.select("td.home").text());
                match.setHomeTeam(element1.select("td.guest").text());

                data.add(match);
                System.out.println(data.toString());

有人知道我如何使用 jSoup 从表格的每一行中获取这些元素吗?

谢谢,

罗伯

【问题讨论】:

  • 我怀疑这个内容是由JavaScript在页面加载后动态生成的。如果是这种情况,那么您将无法在此处使用 Jsoup,因为它是解析器,而不是浏览器模拟器。你需要像 selenium 这样的网络驱动程序。

标签: java jsoup


【解决方案1】:

这个网站的内容似乎是通过 AJAX 生成的。 Jsoup 无法处理这个问题,因为它不是解释 JavaScript 的浏览器。要解决这个抓取问题,您可能需要Selenium webdriver 之类的东西。我之前对一个笼统的问题给出了更长的答案,所以请看这里:

Jsoup get dynamically generated HTML

【讨论】:

  • 那么当我使用 Selenium 加载网页时,我可以在结果上使用 jSoup 吗?感谢您的帮助。
  • 是的,如果您愿意,您可以这样做。只需使用 selenium 中的 driver.getPageSource() 方法即可获取 html。当然,您也可以直接使用 selenium 方法,但如果站点重新加载非常快,您可能会收到 StaleElementExceptions
  • 啊……别忘了点赞,如果你觉得对你有帮助,也许可以接受答案。
猜你喜欢
  • 1970-01-01
  • 2016-09-14
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多