我试图从NBA网站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);
}
答案 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 ...
}
}