JavaAPI——爬虫

107 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情


Pattern和Matcher

  • Pattern
    • Pattern是获取正则表达式的对象
    • Pattern用来存储正则表达式的规则
  • Matcher
    • Matcher是获取文本匹配器对象
    • Matcher在一个文本字符串中找符合pattern规则的小串

1.首先得有一个String的文本字符串

String str = "Java自从95年间问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +  
        "因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";

2.接着我们要创建一个正则表达式的对象

Pattern内部是正则表达式的规则

Pattern pattern = Pattern.compile("Java\\d{0,2}");

3.然后我们要创建一个文本匹配器对象

Matcher matcher = pattern.matcher(str);

解释:

  • matcher是文本匹配器的对象
  • str是大串
  • pattern是正则表达式的规则
  • matcher要在str中找符合pattern规则的小串

4.文本匹配器find文本字符串

拿着文本匹配器从头开始读取寻找是否有满足规则的子串

  • 如果没有,方法返回false
  • 如果有,返回true。在底层记录子串的起始索引和结束索引+1
boolean b = matcher.find();

5.用一个字符串来截取find

String s1 = matcher.group();  
System.out.println(s1);
  • 方法底层会根据find方法记录的索引进行字符串的截取
  • subString(起始索引,结束索引);包头不包尾
  • [0,4)但是不包含4索引
  • 会把截取的小串进行返回

6.结果展示

image.png

7.改进为循环寻找遍历完

while (matcher.find()) {  
    String s = matcher.group();  
    System.out.println(s);  
}

8.循环遍历结果

image.png


从网络中爬取成语

1.创建一个URL对象

URL url = new URL("http://www.art311.cn/zi/4e00.html");

2.连接上这个网络

PS:注意电脑要联网

URLConnection connection = url.openConnection();

3.创建一个对象取读取网络中的数据

BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));  
String line;

4.获取正则表达式的对象

获取 “以百开头的成语”

Pattern pattern = Pattern.compile("百[^(a-zA-Z0-9)]{3}");

5.在读取的时候每次读取一整行

然后在每一行都判断一下是否满足正则表达式

while ((line = br.readLine()) != null) {  
    Matcher matcher = pattern.matcher(line);  
    while (matcher.find())  
        System.out.println(matcher.group());  
}

6.关闭数据流

br.close();

7.结果展示

image.png