【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);
        }






    }
}


http://www.niftyadmin.cn/n/5443001.html

相关文章

Linux系统之安装java开发环境

1 java简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出,后来 Sun 公司被 Oracle (甲骨文)公司收购&#xff…

es 集群核心概念以及实践

节点概念: 节点是一个Elasticsearch的实例 本质上就是一个JAVA进程一台机器上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例 每一个节点都有名字,通过配置文件配置,或者启动时候 -…

C语言经典例题(3) --- 汉诺塔问题、青蛙跳台阶问题

文章目录 1.汉诺塔问题2.青蛙跳台阶问题 1.汉诺塔问题 //汉诺塔问题(递归实现) //思路:1.将A中n-1个盘子放入B中,剩下最后一个(第n个)盘子放入C中。2.将B中n-1个盘子放入A中,剩下最后一个&…

leetcode排列硬币

求根公式解法 public static int arrangeCoins(int n) {return (int) ((Math.sqrt((long) n * 8 1) - 1) / 2);} 二分法 暂未实现 牛顿迭代 暂未实现

8 克隆虚拟机

后期集群我们需要使用多台服务器,此处我们先克隆三台,master,slave01,slave02. 1.先关闭模版虚拟机。再选择 模版虚拟机hadoop100右击--》管理 --》克隆 2.下图中特别注意:建议使用集群的名字作为虚拟机名称。目前克隆主机master. 以上步骤完…

PTA螺旋方阵(有意思的一道题)

实验7-2-9 螺旋方阵 🔥前言 复试期间在刷浙大的pta,螺旋矩阵这一道题确实有意思,就发一篇文章与大家分享一下,下面是螺旋方阵的详细代码,注释有思路。 所谓“螺旋方阵”,是指对任意给定的N,将1…

IT廉连看——职场经验——简历里:兴趣爱好怎么写?

你可能觉得,这有啥可讲的嘛?别小看它。一个经验丰富的面试官,能从这个环节一窥你的真实个性和能力。 遗憾的是,大部分人都是随便填的,比如万年不变的读书、看电影之类,这其实浪费了一次强化能力优势的机会…