ページの一部にjavascriptが読み込まれているため、探しているdivが表示されません。
ブラウザを使用して、ページを読み込み、解析する前にJavaScriptを解釈することができます。 webdrivermanagerのような図書館が役に立ちます。
public static void main(String[] args) throws Exception {
ChromeDriverManager.getInstance().setup();
ChromeDriver chromeDriver = new ChromeDriver();
chromeDriver.get("https://osu.ppy.sh/u/charless");
Document d = Jsoup.parse(chromeDriver.getPageSource());
chromeDriver.close();
for (Element line : d.select("div.profileStatLine")) {
System.out.println(line.select("b").text());
}
}
代わりに、ページ内のjavascriptを調べて、データを取得するのと同じ呼び出しを行うこともできます。
ページはhttps://osu.ppy.sh/pages/include/profile-general.php?u=4084042&m=0
からプロファイルをロードしています。 u
は単純にユーザーIDであり、ページから比較的簡単に抽出できます。
public class ProfileScraper {
private static final Pattern UID_PATTERN = Pattern.compile("var userId = (\\d+);");
public static void main(String[] args) throws IOException {
String uid = getUid("charless");
Document d = Jsoup.connect("https://osu.ppy.sh/pages/include/profile-general.php?u=" + uid).get();
for (Element line : d.select("div.profileStatLine")) {
System.out.println(line.select("b").text());
}
}
public static String getUid(String name) throws IOException {
Document d1 = Jsoup.connect("https://osu.ppy.sh/u/" + name).get();
for (Element script : d1.select("script")) {
String text = script.data();
Matcher uidMatcher = UID_PATTERN.matcher(text);
if (uidMatcher.find()) {
return uidMatcher.group(1);
}
}
throw new IOException("No such character");
}
}
問題は何ですか? – Reimeus
何も出力せず、質問に追加しました。 –
[ページコンテンツがjavascriptで読み込まれ、Jsoupには表示されません](https://stackoverflow.com/questions/7488872/page-content-is-loaded-with-javascript-and-jsoup-doesnt- see-it) – teppic