【Java常用API】带目的的爬虫

复制代码
🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

1、有条件的爬取数据

代码如下:

2、贪婪爬取和非贪婪爬取

代码如下:

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

使用代码:


1、有条件的爬取数据

有如下文本,请按照要求爬取数据。

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

需求1:爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号。

需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11 Java17 Java17

需求3:爬取除了版本号为8,11,17的Java文本

代码如下:
java 复制代码
package Regex;

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

public class regex_demon {
    public static void main(String[] args) {
                /*
            有如下文本,按要求爬取数据。
                Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
                因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台


            需求1:爬取版本号为8,11.17的Java文本,但是只要Java,不显示版本号。
            需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11 Java17 Java17
            需求3:爬取除了版本号为8,11.17的Java文本,
        */
        String s = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +
                "因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久JAVA17也会逐渐登上历史舞台";

        //1.定义正则表达式
        //?理解为前面的数据Java
        //=表示在Java后面要跟随的数据
        //但是在获取的时候,只获取前半部分

        //需求1:
        String regex1 = "Java(?=8|11|17)";  //只匹配Java
        //需求2
        String regex2 = "((?i)Java)(?=8|11|17)"; //忽略大小写
        //需求3
        String regex3 = "((?i)Java)(?!=8|11|17)";  // ?!不等于

        Pattern p = Pattern.compile(regex3);
        Matcher m = p.matcher(s);
        while (m.find()){
            String g = m.group();
            System.out.println(g);
        }

    }
}

2、贪婪爬取和非贪婪爬取

有如下文本,请按照要求爬取数据。

Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaааaаaa

经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支

持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台

需求1:按照ab+的方式爬取ab,b尽可能多获取

需求2:按照ab+的方式爬取ab,b尽可能少获取

代码如下:
java 复制代码
package Regex;

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

public class regex_demon2 {
    public static void main(String[] args) {
                /*
            只写+和*表示贪婪匹配

            +? 非贪婪匹配
            *? 非贪婪匹配

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

            ab+:
            贪婪爬取:abbbbbbbbbbbb
            非贪婪爬取:ab
        */
        String s = "Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa" +
                "经历了很多版木,目前企业中用的最多的是]ava8和]ava11,因为这两个是长期支持版木。" +
                "下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";

        String regex = "ab+";
        String regex2 = "ab+?";

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

        while (m.find()){
            String g = m.group();
            System.out.println(g);
        }

    }
}

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

使用代码:
java 复制代码
package Regex;

public class regex_demon3 {
    public static void main(String[] args) {
        //public string replaceAll(string regex,string newstr) 按照正则表达式的规则进行替换
        //public string[] split(string regex): 按照正则表达式的规则切割字符串

        /*
            有一段字符串:小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠
            要求1:把字符串中三个姓名之间的字母替换为vs
            要求2:把字符串中的三个姓名切割出来*/

        String s = "小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠";
        //细节:
        //方法在底层跟之前一样也会创建文本解析器的对象
        //然后从头开始去读取字符串中的内容,只要有满足的,那么就用第一个参数去替换。

        //要求1:
        /*String result1 = s.replaceAll("[\\w(?!=_)]+","vs");
        System.out.println(result1);*/

        //要求2:
        String[] arr = s.split("[\\w(?!=_)]+");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }
}
相关推荐
benchmark_cc4 分钟前
Python量化实战:如何检测并剔除历史数据中的“闪崩/乌龙指”异常价格点?
开发语言·人工智能·python·量化·quantdash·量化数据源
2501_937860948 分钟前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
牛油果子哥q29 分钟前
C++内存池与对象池精讲:内存碎片、自定义分配器、对象池实现、STL allocator原理、工程落地与性能对比
java·开发语言·c++
CodeStats38 分钟前
《源纹天书》第三百六十三章至第三百六十四章
java·开发语言·源纹天书
天空11042 分钟前
你的网站在 AI 眼里是什么样:三类「人能看见、AI 看不见」的内容
爬虫·seo
万法若空1 小时前
C/C++ 类型别名定义方式对比
java·c语言·c++
伞伞悦读1 小时前
【第14期】Python 基础语法入门:缩进、注释、标识符、代码块和解释器执行
python
Java后端的Ai之路1 小时前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
吴声子夜歌1 小时前
Java——开发中通用的方法和准则(一)
java·开发语言
mmsy10241 小时前
缓存知识点总结
java·spring·缓存