From 3d350b60908b8f53f834a1acc75c9a3985b9e4df Mon Sep 17 00:00:00 2001 From: c-my Date: Tue, 28 Sep 2021 18:44:04 +0800 Subject: [PATCH] write to json file --- build.gradle | 1 + src/main/java/cmy/newsspider/Main.java | 14 ++++++++++---- .../newsspider/pageextractor/IFengExtractor.java | 3 +++ .../java/cmy/newsspider/record/NewsRecord.java | 12 +++++++++++- src/main/java/module-info.java | 3 +++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 9fb8115..eaad79a 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,7 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' implementation group: 'org.jsoup', name: 'jsoup', version: '1.14.2' + implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.12.5' } test { diff --git a/src/main/java/cmy/newsspider/Main.java b/src/main/java/cmy/newsspider/Main.java index 079be75..37b370a 100644 --- a/src/main/java/cmy/newsspider/Main.java +++ b/src/main/java/cmy/newsspider/Main.java @@ -2,13 +2,19 @@ package cmy.newsspider; import cmy.newsspider.searchpageextractor.SearchPageExtractor; import cmy.newsspider.searchpageextractor.SogouSearchPageExtractor; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.nio.file.Paths; public class Main { - public static void main(String[] args) { - + public static void main(String[] args) throws IOException { SearchPageExtractor spe = new SogouSearchPageExtractor(); - var result = spe.searchByKeyword("限电", 20); - System.out.println(result); + var keyword = "限电"; + var result = spe.searchByKeyword(keyword, 20); + var mapper = new ObjectMapper(); + mapper.writerWithDefaultPrettyPrinter().writeValue(Paths.get(String.format("%s-result.json", keyword)).toFile(), result); } } diff --git a/src/main/java/cmy/newsspider/pageextractor/IFengExtractor.java b/src/main/java/cmy/newsspider/pageextractor/IFengExtractor.java index 2126ced..4b3c7bd 100644 --- a/src/main/java/cmy/newsspider/pageextractor/IFengExtractor.java +++ b/src/main/java/cmy/newsspider/pageextractor/IFengExtractor.java @@ -39,6 +39,9 @@ public class IFengExtractor extends PageExtractor { var dateElement = pageDoc.select("div[class^=artical] div[class^=info-] p[class^=time]>span"); if (dateElement.isEmpty()) { dateElement = pageDoc.select("span[itemprop=datePublished]"); + if (dateElement.isEmpty()) { + return ""; + } } return dateElement.get(0).text().strip(); } diff --git a/src/main/java/cmy/newsspider/record/NewsRecord.java b/src/main/java/cmy/newsspider/record/NewsRecord.java index 3c5012d..af33856 100644 --- a/src/main/java/cmy/newsspider/record/NewsRecord.java +++ b/src/main/java/cmy/newsspider/record/NewsRecord.java @@ -1,4 +1,14 @@ package cmy.newsspider.record; -public record NewsRecord(String title, String content, String source, String date) { +import com.fasterxml.jackson.annotation.JsonProperty; + +public record NewsRecord( + @JsonProperty("title") + String title, + @JsonProperty("content") + String content, + @JsonProperty("source") + String source, + @JsonProperty("time") + String time) { } diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 3c0042b..679f6a9 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,4 +1,7 @@ module cmy.newsspider { + exports cmy.newsspider.record to com.fasterxml.jackson.databind; requires org.jsoup; requires jdk.crypto.ec; + requires com.fasterxml.jackson.core; + requires com.fasterxml.jackson.databind; } \ No newline at end of file