페이지의 일부가 자바 스크립트로로드되어 있기 때문에 찾고있는 div가 보이지 않습니다.
브라우저를 사용하여 페이지를로드하고 구문 분석하기 전에 자바 스크립트를 해석 할 수 있습니다. 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());
}
}
대체 방법은 페이지의 자바 스크립트를 검사하여 데이터를 검색하는 것과 동일한 호출을 수행하는 것입니다.
페이지가 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
아무 것도 출력하지 않으며 질문에 추가됩니다. –
[페이지 콘텐츠가 자바 스크립트로로드되어 Jsoup에서 볼 수 없음] (https://stackoverflow.com/questions/7488872/page-content-is-loaded-with-javascript-and-jsoup-doesnt- see-it) – teppic