Qing пре 1 година
родитељ
комит
1ec8909a5b

Разлика између датотеке није приказан због своје велике величине
+ 651 - 0
novel-demo/html/content.html


Разлика између датотеке није приказан због своје велике величине
+ 5 - 0
novel-demo/html/qidian.html


+ 6 - 0
novel-demo/pom.xml

@@ -90,6 +90,12 @@
             <version>1.15.3</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 3 - 1
novel-demo/src/main/java/com/sf/util/GeneUtils.java

@@ -11,6 +11,8 @@ import java.util.Collections;
 public class GeneUtils {
 
     public static void main(String[] args) {
+        String path = System.getProperty("user.dir");
+        System.out.println(path);
         // 一些改动
         FastAutoGenerator.create("jdbc:mysql://localhost:3306/novel-cloud?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai",
                         "root", "root123456")
@@ -18,7 +20,7 @@ public class GeneUtils {
                     builder.author("Qing") // 设置作者
                             .enableSwagger() // 开启 swagger 模式
                             .fileOverride() // 覆盖已生成文件
-                            .outputDir("/Users/Qing/IdeaProjects/novel-demo/src/main/java/"); // 指定输出目录
+                            .outputDir(path + "src/main/java/"); // 指定输出目录
                 })
                 .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                     int typeCode = metaInfo.getJdbcType().TYPE_CODE;

+ 1 - 1
novel-demo/src/main/java/com/sf/util/JsoupUtils.java

@@ -27,7 +27,7 @@ public class JsoupUtils {
 //            doc = Jsoup.connect("http://example.com/").get();
 //            File input = new File("html/example.html");
             // 通过文件获取html页面  "http://example.com/"代表页面的来源 baseUri
-//            doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
+//            doc = Jsoup.parse(input, "UTF-8");
 //
 //            String title = doc.title();
 //            Element content = doc.body();

+ 54 - 0
novel-demo/src/main/java/com/sf/util/SpiderUtils.java

@@ -0,0 +1,54 @@
+package com.sf.util;
+
+import com.sf.util.vo.HtmlVo;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import org.springframework.data.util.Pair;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SpiderUtils {
+
+    public static void main(String[] args) throws Exception{
+        String url = "https://www.qidian.com/book/68223/";
+        Document document = Jsoup.connect(url).get();
+
+        String desc = document.select("p#book-intro-detail").text();
+//        Elements elements = document.select("ul.volume-chapters>li");
+        Elements elements = document.select("li.chapter-item > a");
+        // 两种方式:
+        // 1) 依次拿到每个li -> 取出text作为章节名  -> 取出href访问具体的章节内容  以此类推
+        // 2) 先拿到所有li的文本信息和href  放到list中  然后依次访问href  相当于批量处理
+
+        // 数据结构  text href
+//        List<HtmlVo> list = new ArrayList<>();
+//        Pair<String,String> pair = Pair.of("","");
+        List<Pair<String,String>> pairList = new ArrayList<>();
+
+        for (Element element : elements) {
+            String text = element.text();
+            String linkHref = element.attr("href");
+            linkHref = "https:" + linkHref;
+            Pair<String,String> pair = Pair.of(text,linkHref);
+            pairList.add(pair);
+//            System.out.println();
+        }
+        System.out.println();
+
+        List<Pair<String,String>> contentList = new ArrayList<>();
+        for (Pair<String, String> pair : pairList) {
+            String text = pair.getFirst();
+            String href = pair.getSecond();
+            Document subDoc = Jsoup.connect(href).get();
+            String content = subDoc.select("main").html();
+            Pair<String,String> contentPair = Pair.of(text,content);
+            contentList.add(contentPair);
+            Thread.sleep(200);
+            System.out.println();
+        }
+
+    }
+}

+ 15 - 13
novel-demo/src/main/java/com/sf/util/jdk8/CommandTest.java

@@ -189,19 +189,21 @@ public class CommandTest {
         boolean result = startWith("I Like Code!", s -> s.startsWith("I"));
         System.out.println(result);
 
-        // 练习
-        // 1、 一个参数 一个返回结果的情况
-        //   String process(String str);
-        //   逻辑1   替换 "abcabcabc" -> "dbcdbcdbc"
-        //   逻辑2   去除空格  " abc "  -> "abc"
-        //   逻辑3   分隔  "110,010,000,111"  -> "111" (逗号个数不确定 逗号中间隔位数不确定 分隔后最后几位)
-        //   Function<String, String> 使用
-
-        // 2、一个参数  返回true/false
-        //   boolean process(String str);
-        //   逻辑1   是否包含  "abcabcabc" -> "abc"
-        //   逻辑2   是否结尾   "abc" -> "c"
-        //   Predicate<String>
+        /**
+         练习
+         1、 一个参数 一个返回结果的情况
+           String process(String str);
+           逻辑1   替换 "abcabcabc" -> "dbcdbcdbc"
+           逻辑2   去除空格  " abc "  -> "abc"
+           逻辑3   分隔  "110,010,000,111"  -> "111" (逗号个数不确定 逗号中间隔位数不确定 分隔后最后几位)
+           Function<String, String> 使用
+
+         2、一个参数  返回true/false
+           boolean process(String str);
+           逻辑1   是否包含  "abcabcabc" -> "abc"
+           逻辑2   是否结尾   "abc" -> "c"
+           Predicate<String>
+         **/
 
     }
 

+ 10 - 0
novel-demo/src/main/java/com/sf/util/vo/HtmlVo.java

@@ -0,0 +1,10 @@
+package com.sf.util.vo;
+
+import lombok.Data;
+
+@Data
+public class HtmlVo {
+
+    private String text;
+    private String href;
+}

+ 4 - 1
novel-demo/src/main/resources/application.yml

@@ -5,4 +5,7 @@ spring:
   datasource:
     url: jdbc:mysql://localhost:3306/novel-cloud?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
-    password: root123456
+    password: root123456
+
+#mybatis-plus:
+#  mapper-locations: classpath*:/mapper1/**/*.xml

+ 8 - 0
novel-demo/src/test/java/com/sf/NovelDemoApplicationTests.java

@@ -1,5 +1,6 @@
 package com.sf;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -34,6 +35,13 @@ class NovelDemoApplicationTests {
         System.out.println(cnt);
     }
 
+    @Test
+    public void testSelectLambda(){
+        LambdaQueryWrapper<BookInfo> lambdaQueryWrapper = new LambdaQueryWrapper();
+        lambdaQueryWrapper.eq(BookInfo::getBookName,"人类简史");
+//        lambdaQueryWrapper.select();
+    }
+
     // 分页
     @Test
     public void testPage(){

Неке датотеке нису приказане због велике количине промена