【Java常用API】简单爬虫练习题

🍬 博主介绍

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

目录

练习

本地爬虫和网络爬虫

本地爬虫代码如下:

网络爬虫代码如下

练习需求

代码如下:


练习

本地爬虫和网络爬虫

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

Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是lava8和Iava11,因为这两个是

长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台

要求:找出里面所有的JavaXX

本地爬虫代码如下:

这里用while循环简单,不过也可以像下面的那种就是一直重复写,但是跟麻烦

java 复制代码
package Regex;

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

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

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

        //method1(str);

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

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

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


    }

    private static void method1(String str) {
        //pattern:表示正则表达式
        //Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。
        //         在大串中去找符合匹配的字串

        //获取正则表达式的对象
        Pattern p = Pattern.compile("Java\\d{0,2}");
        //获取文本匹配器的对象
        //m:文本匹配器的对象
        //str:大串
        //p:规则
        Matcher m = p.matcher(str);

        //拿着文本匹配器从头开始读取,寻找是否有满足的子串
        //如果没有,方法返回false
        //如果有,返回true,在底层记录子串的起始索引和结束索引+1
        //0,4
        boolean b = m.find();

        //方法底层全部会按照find()方法进行索引进行字符串的截取
        //substring(起始索引,结束索引);包头不包尾
        //(0,4),不包含4 索引
        String s1 = m.group();
        System.out.println(s1);

        //第二次调用find方法
        b = m.find();

        //第二次调用group方法的时候,会根据find方法记录的索引再次截取子串
        String s2 = m.group();
        System.out.println(s2);
    }
}
网络爬虫代码如下
java 复制代码
package com.itheima.a08regexdemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo7 {
    public static void main(String[] args) throws IOException {
        /* 扩展需求2:
            把连接:https://m.sengzan.com/jiaoyu/29104.html?ivk sa=1025883i
            中所有的身份证号码都爬取出来。
        */

        //创建一个URL对象
        URL url = new URL("https://m.sengzan.com/jiaoyu/29104.html?ivk sa=1025883i");
        //连接上这个网址
        //细节:保证网络是畅通
        URLConnection conn = url.openConnection();//创建一个对象去读取网络中的数据
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        //获取正则表达式的对象pattern
        String regex = "[1-9]\\d{17}";
        Pattern pattern = Pattern.compile(regex);//在读取的时候每次读一整行
        while ((line = br.readLine()) != null) {
            //拿着文本匹配器的对象matcher按照pattern的规则去读取当前的这一行信息
            Matcher matcher = pattern.matcher(line);
            while (matcher.find()) {
                System.out.println(matcher.group());
            }
        }
        br.close();
    }
}

练习需求

把下面文本中的座机电话,邮箱,手机号,热线都爬取出来。

来实验室程序员学习Java,

手机号:18512516758,18512508907或者联系邮箱:boniu@itcast.cn,

座机电话:01036517895,010-98951256邮箱:bozai@itcast.cn,

热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090

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

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

public class pattern2 {
    public static void main(String[] args) {
                /*
            需求:把下面文本中的座机电话,邮箱,手机号,热线都爬取出来。
            来黑马程序员学习Java,
            手机号:18512516758,18512508907或者联系邮箱:boniu@itcast.cn,
            座机电话:01036517895,010-98951256邮箱:bozai@itcast.cn,
            热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090

            手机号的正则表达式:1[3-9]\d{9}
            邮箱的正则表达式:\w+@[\w&&[^_]]{2,6}(\.[a-zA-Z]{2,3}){1,2}座机电话的正则表达式:θ\d{2,3}-?[1-9]\d{4,9}
            热线电话的正则表达式:400-?[1-9]\\d{2}-?[1-9]\\d{3}

        */

        String s = "来实验室程序员学习Java," +
                "电话:18512516758,18512508907" + "或者联系邮箱:boniu@itcast.cn," +
                "座机电话:01036517895,010-98951256" + "邮箱:bozai@itcast.cn," +
                "热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090";

        String regex = "(1[3-9]\\d{9})|(\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2})" +
                "|(0\\d{2,3}-?[1-9]\\d{4,9})" +
                "(400-?[1-9]\\d{2}-?[1-9]\\d{3})";

        //1、获取正确的正则表达式的对象
        Pattern p = Pattern.compile(regex);

        //2、获取文本匹配的对象
        //利用m去读取s,会按照p的规则找里面的小串
        Matcher m = p.matcher(s);

        //3、利用循环获取每一个数据
        while (m.find()){
            String str = m.group();
            System.out.println(str);
        }






    }
}
相关推荐
GoodStudyAndDayDayUp5 分钟前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
信号处理学渣13 分钟前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客13 分钟前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
蓝天星空14 分钟前
Python调用open ai接口
人工智能·python
jasmine s23 分钟前
Pandas
开发语言·python
郭wes代码23 分钟前
Cmd命令大全(万字详细版)
python·算法·小程序
装不满的克莱因瓶35 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
leaf_leaves_leaf40 分钟前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
n北斗42 分钟前
常用类晨考day15
java
biomooc43 分钟前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言