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()方法** ![](https://img-blog.csdnimg.cn/direct/6b7c32b2efbc4293b0f48c57572b07a7.png) this表示当前方法调用者的地址值 方法在底层跟之前一样也会创建文本解析器的对象 然后从头开始去读取字符串中的内容,只要有满足的 那么就用第二个参数去替换 **split()方法** ![](https://img-blog.csdnimg.cn/direct/1c58a67d9af3432bb2cc528caea55a3c.png) 按照正则表达式下刀切割 在放入字符串数组 返回 在API文档中查找 ![](https://img-blog.csdnimg.cn/direct/dcc484b0c22e4d5ebc69b6fcb15bd7f0.png) ## 个人号推广 ### 博客主页 [多多!-CSDN博客](https://gczdy.blog.csdn.net/?type=blog "多多!-CSDN博客") ### Web后端开发 [https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482](https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482 "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_12642989.html?spm=1001.2014.3001.5482 "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_12651993.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_12699801.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_12630954.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_12701605.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](https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482 "https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482")

相关推荐
neoooo3 分钟前
别慌,Java只有值传递——一次搞懂“为啥我改了它还不变”!
java·后端·spring
秋难降3 分钟前
Python 知识 “八股”:给有 C 和 Java 基础的你😁😁😁
java·python·c
安思派Anspire4 分钟前
LangGraph + MCP + Ollama:构建强大代理 AI 的关键(一)
前端·深度学习·架构
wuxuanok6 分钟前
Web后端开发-请求响应
java·开发语言·笔记·学习
用户7785371836967 分钟前
一力破万法:从0实现一个http代理池
后端·爬虫
livemetee14 分钟前
spring-ai 1.0.0 (3)交互增强:Advisor 顾问模块
java
DDDDDouble19 分钟前
<二>Sping-AI alibaba 入门-记忆聊天及持久化
java·人工智能
Sally璐璐26 分钟前
IPSAN 共享存储详解:架构、优化与落地实践指南
开发语言·php
拖孩34 分钟前
微信群太多,管理麻烦?那试试接入AI助手吧~
前端·后端·微信
像风一样的男人@36 分钟前
python --货车装厢问题
开发语言·python