Вот решение, использующее jsoup для разбора HTML и Джексона для разбора JSON:
public static void main(String[] args) throws IOException {
// Extract JSON string
String body = Jsoup.connect("https://en.wikipedia.org/w/api.php?action=parse§ion=0&prop=text&format=json&page=The%20Matrix")
.ignoreContentType(true).execute().body();
// Extract HTML string from JSON
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
JsonNode targetNode = mapper.readTree(body).get("parse").get("text").get("*");
// Generic but fragile function to extract specific details
Function<String, String> retrieveDetailsOf = detailsOf ->
Jsoup.parse(targetNode.asText())
.select(".infobox tr th:contains(" + detailsOf + ") ~ td a[title]")
.stream().map(e -> e.attr("title")).collect(Collectors.toList()).toString();
System.out.println(retrieveDetailsOf.apply("Directed by"));
System.out.println(retrieveDetailsOf.apply("Produced by"));
System.out.println(retrieveDetailsOf.apply("Music by"));
System.out.println(retrieveDetailsOf.apply("Starring"));
}
Выход:
[The Wachowskis]
[Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving, Joe Pantoliano]
Зависимости:
implementation("org.jsoup:jsoup:1.12.2")
implementation("com.fasterxml.jackson.core:jackson-core:2.10.2")
implementation("com.fasterxml.jackson.core:jackson-databind:2.10.2")
Просто помните о том, что любые изменения в структуре контента в основном приводят к перерывам. Скорее используйте официальные API деталей mov ie, если они доступны.