Jsoup没有使用select()函数显示标签

时间:2016-03-15 10:21:55

标签: html web-scraping jsoup

我试图从NBA网站here抓取球队的输赢记录数据。这是我要捕捉的文字行的图像,它以黑色圈出:

enter image description here

有人可以尝试抓取这些确切的数据并查看它是否有效吗?我已经工作了好几个小时,没有任何工作。我能够抓住球队名称和开始时间,但是当我尝试在记录线上使用jsoup的选择功能时,我得到0结果。好像标签是从html层次结构中隐藏的。这可能吗?我是新手,我可能做错了。

我尝试过的代码:

Document document = Jsoup.connect("http://espn.go.com/nba/scoreboard/_/date/20160315").get();
            games = document.select("section.sb-score");

            for(Element game : games)
            {
                mHomeTeam = game.select("td.home").select("div.sb-meta").text();
                Elements test = game.select("p.record.overall");
                mAwayTeam = game.select("td.away").select("div.sb-meta").text();
                mHomeTeamRecord = game.select("td.home").select("div.record-container").select("p.record").text();
                mAwayTeamRecord = game.select("td.away").select("div.record-container").select("p.record").text();
                mGameStartTime = game.select("span.time").text();

                Game newGameObj = new Game(mHomeTeam, mAwayTeam, mGameStartTime, mHomeTeamRecord, mAwayTeamRecord);
                mGameList.add(newGameObj);
            }

1 个答案:

答案 0 :(得分:2)

团队胜负记录数据由Javascript在页面中加载。由于Jsoup是一个HTML解析器,因此它不会使用select()方法显示标记。

但是,似乎这些数据直接位于页面内部,名为window.espn.scoreboardData的Javascript对象。

以下是如何提取此数据:

Document doc = Jsoup.connect("http://espn.go.com/nba/scoreboard/_/date/20160315").get();

for(Element script : doc.select("script")) {
    String scriptData = script.html();
    if (scriptData.contains("window.espn.scoreboardData")) {
        // Parse scriptData to extract team win-loss record ...
    }
}