JavaSE 利用正则表达式进行本地和网络爬取数据(爬虫)

爬虫

正则表达式的作用

作用1:校验字符串是满足规则

作用2:在一段文本中查找满足需要的内容

本地爬虫和网络爬虫

Pattern类 表示正则表达式

Matter类 文本编译器,作用按照正则表达式的规则去读取字符串,从头开始读取,在大串中去找符合匹配规则的子串

方法底层会根据find方法记录的索引进行字符串的截取

subString(起始索引,结束索引)

包头不包尾

爬取第一个

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

public class Main {
    public static void main(String[] args) {

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

        //创建Partton类 表示正则表达式
        //Matter类  文本编译器,作用按照正则表达式的规则去读取字符串
        //从头开始读取,在大串中去找符合匹配规则的子串

        Pattern p=Pattern.compile("Java\\d{0,2}");
        Matcher m= p.matcher(str);

        m.find();
        //拿着文本匹配器从头开始读取,查找是否有满足规则的子串
        //返回值true false
        //还会记录子串的起始索引 结束索引+1

        //方法底层会根据find方法记录的索引进行字符串的截取
        //subString(起始索引,结束索引)
        //包头不包尾
        String s=m.group();
        System.out.println(s);


    }
}

依次爬取

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

public class Main {
    public static void main(String[] args) {

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

        //method(str);

        //获得正则表达式的对象
        Pattern p=Pattern.compile("Java\\d{0,2}");

        //获得文本匹配器的对象
        //拿着m去读取str 找符合p规则的子串
        Matcher m= p.matcher(str);

        //用循环爬取
        while(m.find()){
            String s=m.group();
            System.out.println(s);
        }
    }

    private static void method(String str) {
        //创建Partton类 表示正则表达式
        //Matter类  文本编译器,作用按照正则表达式的规则去读取字符串
        //从头开始读取,在大串中去找符合匹配规则的子串

        Pattern p=Pattern.compile("Java\\d{0,2}");
        Matcher m= p.matcher(str);

        m.find();
        //拿着文本匹配器从头开始读取,查找是否有满足规则的子串
        //返回true false
        //还会记录子串的起始索引 结束索引+1

        //方法底层会根据find方法记录的索引进行字符串的截取
        //subString(起始索引,结束索引)
        //包头不包尾
        String s=m.group();
        System.out.println(s);
    }
}

爬取网站中的内容

有条件的爬取数据

定义正则表达式

String regex ="Java(?=8|11|17)"

?表示前面的数据Java (替代的占位符)

=表示在Java后面要跟随的数据

这样写的意思是,在获取的时候,只获取前半部分

先获取到正则表达式的对象

再传递给文本解析器对象

Pattern p = Pattern.compile(regex);
Matcher m=p.matcher(str);

最后用文本解析器调用方法

while(m.find){
    m.group();
}

find()

如果找到了

方法返回值为true

并且把字符串始末索引加一后进行记录

group()

会按照find记录的索引去记录字符串

((?i)Java)表示不计Java的大小写

需求1

需求2

需求3

!表示非

贪婪爬取和非贪婪爬取

贪婪爬取:在爬取数据的时候尽可能多获取数据

非贪婪爬取:在爬取数据的时候尽可能少获取数据

正则表达式在字符串方法中的使用

练习

快捷键ctr l + p查看方法参数

[\ \w && [ ^ _ ]]+

在前面的范围中去掉下划线_ 得到数字和字母至少出现一次

replaceAll()方法

this表示当前方法调用者的地址值

方法在底层跟之前一样也会创建文本解析器的对象

然后从头开始去读取字符串中的内容,只要有满足的

那么就用第二个参数去替换

split()方法

按照正则表达式下刀切割 在放入字符串数组 返回

在API文档中查找

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

相关推荐
Swift社区3 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht3 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht3 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20243 小时前
Swift 数组
开发语言
吾日三省吾码4 小时前
JVM 性能调优
java
stm 学习ing4 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
Estar.Lee4 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
湫ccc5 小时前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐5 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis