目录
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);
}
}
}
逐句分析
- 创建一个Scanner来获取用户输入的字符串
- 句式为 Pattern 对象名 = Pattern.compile("要用的正则表达式"); Pattern类的作用是写入正则表达式
- 句式为 Matcher 对象名 = 刚才的Pattern的对象名.matcher(你输入的正则表达式,这里可以是变量);
Matcher类的作用是创建一个检测器,判断正则表达式可以匹配该字符串中的哪些字符 - 没有matcher.find()这句话会报错:“No match found”
-
句式为 刚才的Matcher的对象名.group()
group方法的意思是把正则表达式匹配的字符串提取出来,存进变量里2. CSS选择器
CSS选择器是一个十分方便的工具,能帮我们选择html文档中的各种标签
-
元素选择器
作用:选中对应元素/标签里面的内容
语法:标签名{}
如:选取h1标签中的文本内容String title = document.body().selectFirst("h1").text();
-
id选择器
作用:选中对应id属性值的元素
语法:#id属性值{}
如:选取第一个出现的content标签内的内容Element chapterContent = chapter.selectFirst("#content");
-
关系选择器
- 父子关系:父元素直接包含子元素,子元素直接被父元素包含
<div><p></p></div> div标签是p标签的父元素,p标签是div标签的子元素
- 兄弟关系:拥有同一个父元素
<div><p></p><h1></h1></div> p标签和h1标签就是兄弟关系
如:选择父元素为dl的所有dd标签
Elements menu = document.body().select("dl dd");
- 父子关系:父元素直接包含子元素,子元素直接被父元素包含
-
属性选择器
有以下五种:[属性] 选中含有指定属性的元素 [属性=属性值] 选中含有指定属性和指定属性值的元素 [属性^=属性值] 选中含有指定属性和指定属性值开头的元素 [属性$=属性值] 选中含有指定属性和指定属性值结尾的元素 [属性*=属性值] 选中指定属性名和含有指定属性值的元素
-
类选择器
作用:选中对应class属性值的元素
语法:.class属性值{} -
通配选择器
作用:选中页面中所有元素
语法:*{}
后三种目前还没在爬虫作业里出现
3. 一点思考
如果要提高用户体验的话,我觉得可以把springboot和爬虫结合起来,让用户通过操作网页上的按钮和输入框来执行各项命令,同时用文本框返回正在爬取的章节和各种提示语句。
功能构想:
- 用输入框选择想要爬取的章节(比如前面的一百章用户已经看完了,此时没必要再爬一遍前一百章)
- 设置一个stop按钮,以应对爬取过程中的突发情况
- 用下拉菜单的形式让用户选择目标小说所在的小说站,因为爬虫程序不一定通用,有可能在笔趣阁能运行,在爱下书就不能用。这也避免了用户输错url格式。
- 以进度条的形式告知用户爬取进度
- 设置一个按钮,点击之后打开成品文本
- (而且我感觉网页操作比cmd好用)
因为前后端传输的代码不会写,所以这些想法就搁置了。如果这些功能能实现的话,效果应该会不错吧:)