嗨,我是使用 JSoap 和 html 的新手。我目前正在嘗試從游戲統計網站獲取資訊,但在<h1></h1>.
Document document = Jsoup.connect("https://na.wildstats.gg/en/profile/60ae4f204a9aa2000f3d5f33").get();
Elements winRates = document.getElementsByClass("text-center m-0");
String html = winRates.text();
System.out.println(winRates);
System.out.println(html);
System.out.println("test");
輸出:
<h1 id="battleStats_WinRate"></h1>
<h1 id="battleStats_MVP"></h1>
<h1 id="battleStats_Played"></h1>
test
當我檢查網站時,有一個百分比、MVPS 數量和 之間玩的游戲<h1></h1>,但我沒有顯示。我想知道我將如何獲得這些數字。我已經能夠獲得球員的身份和等級和級別。
uj5u.com熱心網友回復:
Jsoup 用于靜態或非常簡單的 html 站點。
第一個 http 請求中的復雜站點下載一個基本的或空的 index.html,然后使用 ajax,從遠程服務(如 rest apis 或回傳 json 的微服務)獲取資訊。
這就是為什么,湯會回傳給你那個空的 html。
解決方案1
使用另一個使用記憶體中瀏覽器的框架。這種框架能夠等到ajax 獲取資訊,然后您將獲得預期值:
- puppeteer.js
- casper.js
- sinon.js
解決方案2
如果您的唯一目標是獲取資料,您可以使用您喜歡的瀏覽器的開發者控制臺,并以 json 格式識別回傳您的游戲資料的 http 服務。之后,通過一個非常簡單的 http 連接,您將獲得游戲資料
解決方案3
使用 selenium 和無頭瀏覽器獲取資料,等待 ajax 回應。
uj5u.com熱心網友回復:
此代碼將作業中使用JSoup和正則運算式命名組,以獲得三種型別的戰斗統計的allBattles,normalBattles,rankedBattles與所有屬性
Document document = Jsoup.connect("https://na.wildstats.gg/en/profile/60ae4f204a9aa2000f3d5f33").get();
Elements elements = document.select("script");
Pattern parserPattern = Pattern.compile("'(?<BATTLE>[a-zA-Z] )': [{](?<ATTRIBUTES>[\n 'a-zA-Z0-9 :\"0-9a-zA-Z,.] )[};]");
Matcher matcher = parserPattern.matcher(elements.toString());
while (matcher.find()) {
String battleType = matcher.group("BATTLE");
System.out.println("Battle Type: " battleType);
String[] attributesLines = matcher.group("ATTRIBUTES")
.replaceAll(",\n", "\n")
.split("\n");
for (String line : attributesLines) {
String[] keyValue = line.trim().split(":");
if (keyValue.length != 2) continue;
String key = keyValue[0];
String value = keyValue[1];
System.out.println("\t" key " : " value);
}
}
輸出將是

然后,您可以為每場戰斗創建一個類,并使用名稱和屬性映射來表示結果并在 UI 中使用它們
public class Battle {
private String name;
private Map<String, String> attributes;
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365496.html
上一篇:當開始grid-item為空且有grid-gap時對齊網格起點和終點
下一篇:為什么一個拒絕顯示?
