我有以下URL:
https://en.wikipedia.org/w/api.php?action=parse§ion=0&prop=text&format=json&page=%20Matrix
它返回一个JSON响应,其中HTML代码嵌入在JSON对象中(请参阅链接(。
如何使用java从HTML部分检索演员、导演等详细信息?
如果可能的话,我如何使用java将Html部分转换为JSON?
或者有没有任何方法可以更改url本身,以获得可读的JSON格式的电影数据?
以下是一个使用jsoup解析HTML和jackson解析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。