软件园学生在线

  • {{ item.name }}
  • 2023试用期

登录与注册

【后端二】李朝阳(初稿)

  • LiZhaoyang
  • 2022-10-23
  • 1

目录


1. 正则表达式

2. CSS选择器

3. 一点想法


一、 正则表达式

正则表达式是一类用于匹配内容的符号

1. 常用的正则表达式

  • 条件
    指定要匹配的字符

    直接输对应的字符 “原封不动地匹配这个字符”
    . “匹配除换行符以外的所有字符。”
    \d,\w,\s “匹配数字、字符、空格。”
    \D,\W,\S “匹配非数字、非字符、非空格。”
    Hello后端 “匹配 Hello后端 整个字符串。”
    [Hello后端] “匹配 H、e、l、o、后、端 中的一个字符。”
    [a-z] “匹配 a 到 z 中的一个字母。”
    [^后端2] “匹配除了 后、端、2 的其他一个字符。”
    QWQ|qwq “匹配 QWQ 或 qwq。”

  • 通配
    加在条件后方,限制条件的匹配次数。

    ? “重复 0 次或 1 次。”

    • “重复 0 次或多次。”
    • “重复 1 次或多次。”
      {n} “重复 n次。”
      {n,} “重复 n次以上。”
      {m,n} “重复最少 m 次,最多 n 次。”
  • 在线测试工具
    点击这里
    (https://c.runoob.com/front-end/854/)
    可以测试你输入的正则表达式

2. Java中使用正则表达式的方法

示例代码如下:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //1
        String str = sc.nextLine();                 //1
        Pattern pattern = Pattern.compile("hello"); //2
        Matcher matcher = pattern.matcher(str);     //3
        while(matcher.find()) {                     //4
            var a = matcher.group();                //5
            System.out.println(a);
        }
    }
}
逐句分析
  1. 创建一个Scanner来获取用户输入的字符串
  2. 句式为 Pattern 对象名 = Pattern.compile("要用的正则表达式"); Pattern类的作用是写入正则表达式
  3. 句式为 Matcher 对象名 = 刚才的Pattern的对象名.matcher(你输入的正则表达式,这里可以是变量);
    Matcher类的作用是创建一个检测器,判断正则表达式可以匹配该字符串中的哪些字符
  4. 没有matcher.find()这句话会报错:“No match found”
  5. 句式为 刚才的Matcher的对象名.group()
    group方法的意思是把正则表达式匹配的字符串提取出来,存进变量里

    2. CSS选择器

    CSS选择器是一个十分方便的工具,能帮我们选择html文档中的各种标签

  • 元素选择器
    作用:选中对应元素/标签里面的内容
    语法:标签名{}
    如:选取h1标签中的文本内容

    String title = document.body().selectFirst("h1").text();
  • id选择器
    作用:选中对应id属性值的元素
    语法:#id属性值{}
    如:选取第一个出现的content标签内的内容

    Element chapterContent = chapter.selectFirst("#content");
  • 关系选择器

    1. 父子关系:父元素直接包含子元素,子元素直接被父元素包含
      <div><p></p></div>
      div标签是p标签的父元素,p标签是div标签的子元素
    2. 兄弟关系:拥有同一个父元素
      <div><p></p><h1></h1></div>
      p标签和h1标签就是兄弟关系

      如:选择父元素为dl的所有dd标签

      Elements menu = document.body().select("dl dd");
  • 属性选择器
    有以下五种:

    [属性]           选中含有指定属性的元素
    [属性=属性值]     选中含有指定属性和指定属性值的元素
    [属性^=属性值]   选中含有指定属性和指定属性值开头的元素
    [属性$=属性值]   选中含有指定属性和指定属性值结尾的元素
    [属性*=属性值]   选中指定属性名和含有指定属性值的元素
  • 类选择器
    作用:选中对应class属性值的元素
    语法:.class属性值{}

  • 通配选择器
    作用:选中页面中所有元素
    语法:*{}

后三种目前还没在爬虫作业里出现


3. 一点思考

如果要提高用户体验的话,我觉得可以把springboot和爬虫结合起来,让用户通过操作网页上的按钮和输入框来执行各项命令,同时用文本框返回正在爬取的章节和各种提示语句。

功能构想:

  1. 用输入框选择想要爬取的章节(比如前面的一百章用户已经看完了,此时没必要再爬一遍前一百章)
  2. 设置一个stop按钮,以应对爬取过程中的突发情况
  3. 用下拉菜单的形式让用户选择目标小说所在的小说站,因为爬虫程序不一定通用,有可能在笔趣阁能运行,在爱下书就不能用。这也避免了用户输错url格式。
  4. 以进度条的形式告知用户爬取进度
  5. 设置一个按钮,点击之后打开成品文本
  6. (而且我感觉网页操作比cmd好用)

因为前后端传输的代码不会写,所以这些想法就搁置了。如果这些功能能实现的话,效果应该会不错吧:)

LiZhaoyang
LiZhaoyang
© 2025 软件园学生在线
Theme by Wing