【问题标题】:JSoup not parsing a <div>. Everything else is getting parsedJSoup 不解析 <div>。其他一切都在解析
【发布时间】:2015-09-29 03:08:33
【问题描述】:

所以我正在使用 JSoup 并尝试解析这个网站:

http://www.sportstats.com/soccer/germany/bundesliga/

我试图至少获得第一个&lt;div class = clubTable&gt;,它会在接下来的 3 天里举行即将举行的比赛。

这是我的代码:

    try{
        url = new URL("http://www.sportstats.com/soccer/germany/bundesliga/");
        doc = Jsoup.parse(url, 3 * 1000);
    }catch(MalformedURLException ie){
        System.out.println(ie);
    }catch(IOException e){
        System.out.println(e);
    }
    Elements links = doc.select("div > div.tableShadow");
    System.out.println(links);

我的输出是这样的:

<div class="tableShadow" id="LS_nextMatchesContent"></div>

问题是,在&lt;div&gt; 之间应该有整个表格(如果您查看网站的 HTML 代码,您可能已经看到了)。但是当我解析网站时它没有出现。 当我尝试选择特定的 &lt;div&gt; 时,它也没有显示。

我不是很喜欢 JSoup,所以如果有人知道如何解决这个问题,我会很高兴听到。

【问题讨论】:

  • 它不存在。使用 JSoup 时常见的错误之一是认为 Javascript 填充的数据是页面的一部分。但是,如果您使用“查看页面源”而不是 FireBug/Browser 工具查看页面源,您会看到 div 是空的。所以 JSoup 不会为你获取这些数据。
  • 是的,我只是想出了同样的事情,但感谢您的快速回答!我使用了谷歌浏览器提供的“检查元素”工具。

标签: java html parsing jsoup


【解决方案1】:

JSoup 不解释 JavaScript,因此当网站通过 AJAX 调用加载数据时,Jsoup 不会自动获取它。两种方法可能会导致您获得所需的结果:

  1. Selenium 与真正的浏览器、HTMLUnit 或phantomjs 一起使用。这很可能会奏效,但可能会很慢。

  2. 识别 AJAX 调用,了解 API 并使用这些知识手动构建相同的 http 请求。为此,您可以继续使用 Jsoup,尽管像 Apache httpClient 这样更强大的 HTTP 库可能会有所帮助。

【讨论】:

  • 感谢您的快速答复!我会看看如何使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 2011-12-11
  • 2014-09-22
相关资源
最近更新 更多