对于爬虫的学习

本地爬取

package MyApi.a08regexdemo;

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

public class RegexDemo03 {
    public static void main(String[] args) {
       //要求:找出里面所有javaxx
        String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
                "相信在不久的未来Java17也会逐渐登上历史舞台";
     //   method1(str);
        //1.获取正则表达式的对象
        Pattern pattern = Pattern.compile("Java\\d{0,2}");
        //2.获取文本匹配器的对象
        Matcher m  = pattern.matcher(str);
        //3.利用循环获取
        while(m.find()){
            String s=m.group();
            System.out.println(s);
        }
    }

    private static void method1(String str) {
        //获取正则表达式的对象
        Pattern pattern = Pattern.compile("Java\\d{0,2}");
        //获取文本匹配器的对象
        Matcher m  = pattern.matcher(str);
        //拿着文本匹配器从头开始读取,寻找是否有满足规则的字串
        //如果没有,方法返回false
        //如果有,返回true,在底层记录字串的起始索引和结束索引+1
        boolean b = m.find();
        //方法底层会根据find方法记录的索引进行字符串的截取
        //subString(起始索引,结束索引):包头不包尾
        //会把截取的小串进行返回
        String s1=    m.group();
        System.out.println(s1);
        //第二次调用find的时候,会继续读取后面的内容
        //读取到第二个满足要求的字串,方法会继续返回true
        //并把第二个字串的起始索引和结束索引+1,进行记录
        boolean b1 = m.find();
        String s2=m.group();
        System.out.println(s2);
    }
}

网络爬取

package MyApi.a08regexdemo;

import javax.print.DocFlavor;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo04 {
    public static void main(String[] args) {
        /*需求:
        把连接:http://m.sengzan.com/jiaoyu/29104.html?ivk_sa=105883i
        中的所有身份证号码都爬取出来
        * */
        //创建一个url对象
        URL url=new URL("http://m.sengzan.com/jiaoyu/29104.html?ivk_sa=105883i");
    //连接上这个网址
        URLConnection conn=url.openConnection();
        //创建一个对象去读取网络中的数据
        BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())) ;
        String line;
        //获取正则表达式对象
        String regex="[1-9]\\d{17}";
        Pattern pattern=Pattern.compile(regex);
        while((line=br.readLine())!=null){
            Matcher matcher=pattern.matcher(line);
            while(matcher.find()){
                System.out.println(matcher.group());
            }
        }
        br.close();
    }
}
package MyApi.a08regexdemo;

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

public class Regexdemoo5 {
    public static void main(String[] args) {
        /*
        * 需求:把下面的文本中的座机号码,邮箱,手机号,热线都爬取出来
        * 来黑马程序员学习Java
        * 手机号: 18512516758,18512508907
        * 或者联系邮箱:boniu@itcast.cn,
        * 座机电话:01036517895,010-9895256
        * 邮箱:boniu@itcast.cn,
        * 热线电话:400-618-9090,400-618-4000,4006184000,4006189090 */
   String s="来黑马程序员学习Java" +
           "手机号: 18512516758,18512508907" +
           "或者联系邮箱:boniu@itcast.cn," +
           "座机电话:01036517895,010-9895256" +
           "邮箱:boniu@itcast.cn," +
           "热线电话:400-618-9090,400-618-4000,4006184000,4006189090";
   String regex1="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})";
        Pattern pattern=Pattern.compile("regex1");
        Matcher m = pattern.matcher(s);
        while(m.find()){
        String str=    m.group();
            System.out.println(str);
        }

    }
}

package MyApi.a08regexdemo;

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

public class Regexdemo06 {
    public static void main(String[] args) {
        String str="java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
                "相信在不久的未来Java17也会逐渐登上历史舞台";
     //需求1
        String regex1="((?i)Java)(?=8|11|17)";
//需求2
        String regex2="((?i)Java)(8|11|17)";
        String regex3="((?i)Java)(?:8|11|17)";
        //需求3
        String regex4="((?i)Java)(?!8|11|17)";
        Pattern pattern=Pattern.compile(regex4);
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()){
            String s=matcher.group();
            System.out.println(s);
        }

    }
}

贪婪爬取和非贪婪爬取

package MyApi.a08regexdemo;

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

public class Regexdemo07 {
    public static void main(String[] args) {
        String str="Java自从95年问世以来abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
                "相信在不久的未来Java17也会逐渐登上历史舞台";
       /*
       * 贪婪爬取:在爬取数据的时候尽可能的多获取数据
       * 非贪婪爬取:在爬取数据的时候尽可能的少获取数据
       * java当中默认是贪婪爬取
       * 如果我们在数量词+ * 的后面加上问号,那么此时就是非贪婪爬取*/
        //需求1
        String regex="ab+";
        //需求2
        String regex1="ab+?";
        Pattern pattern=Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()){
            System.out.println(matcher.group());
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432395.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

html标签元素类型,一个前端妹子的面试笔记

计算机网络篇 HTTP HTTP 报文结构是怎样的?HTTP有哪些请求方法?GET 和 POST 有什么区别?如何理解 URI?如何理解 HTTP 状态码?简要概括一下 HTTP 的特点和缺点?对 Accept 系列字段了解多少?对于…

【Linux篇】Linux下的第一个小程序--进度条 蹦迪炫彩进图条

💛不要有太大压力🧡 💛生活不是选择而是热爱🧡 文章目录 Linux下第一个小程序:进度条两个背景知识缓冲区回车和换行是一个概念? 进图条原理进度条代码效果其他玩法:蹦迪版进度条 Linux下第一个小…

CSS常用五类选择器,附面试题

学习路线 第一阶段:网页制作 HTML:常用标签,锚点,列表标签,表单标签,表格标签,标签分类,标签语义化,注释,字符实体 CSS:CSS介绍,全局…

常用日期和时间标准对比:HTML, ISO 8601, RFC 3339, RFC 5322

1. HTML, ISO 8601, RFC 3339, RFC 5322 对比 日期和时间,对于不同系统和平台之间的数据交换和互操作至关重要。本文将对比 HTML 标准、ISO 8601、RFC 3339 和 RFC 5322,为读者提供参考。 表格文字版见文末-附 1.1. 标准链接 HTML 标准: https://html…

Vue基础入门(4)- Vuex的使用

Vue基础入门(4)- Vuex的使用 Vuex 主要内容:Store以及其中的state、mutations、actions、getters、modules属性 介绍:Vuex 是一个 Vue 的 状态管理工具,状态就是数据。 大白话:Vuex 是一个插件&#xff…

Linux开发板移植rz、sz指令实现串口传输文件

一、开发环境 实现开发板和电脑通过串口来收发互传文件。 开发板:NUC980开发板 环境:Ubuntu 22.04.3 LTS 64-bit lrzsz的源码包:例如 lrzsz-0.12.20.tar.gz,下载地址https://ohse.de/uwe/software/lrzsz.html 二、移植步骤 在开发板上移植…

深拷贝浅拷贝的区别?如何实现一个深浅拷贝(非常详细哦)

文章目录 一、数据类型存储二、浅拷贝Object.assignslice()concat()拓展运算符 三、深拷贝\_.cloneDeep()jQuery.extend()JSON.stringify()循环递归 四、区别小结 一、数据类型存储 前面文章我们讲到,JavaScript中存在两大数据类型: 基本类型引用类型 …

PyTorch2.0 环境搭建详细步骤(Nvidia显卡)

Step 1 、查看显卡驱动版本 Step2、下载CUDA 11.7 或者11.8(我自己用的这个)也行,稍后我会贴出来版本匹配对应表 CUDA Toolkit - Free Tools and Training | NVIDIA Developer Step3、下载CUDNN cuDNN 9.0.0 Downloads | NVIDIA Developer Step4、安装…

183基于matlab的非线性调频模态分解(VNCMD)

基于matlab的非线性调频模态分解(VNCMD),一种基于变分方法的信号分解技术,它将信号分解为多个模式。能够处理非线性调频信号,且对噪声具有较好的鲁棒性。VNCMD的基本原理是通过最小化信号与模式之间的差异来实现信号的分解。程序已调通&#…

Vue中的v-for中为什么不推荐使用index作为key值

在Vue中,我们经常会用到v-for指令来遍历数组或对象并渲染列表。而在使用v-for指令时,通常会需要给每个遍历的元素指定一个唯一的key值,以帮助Vue更高效地更新DOM。 在很多情况下,我们可能会倾向于使用index作为key值,…

公有云等保合规安全解决方案的设计与实现

随着云计算的快速发展,公有云已成为企业的重要选择。然而,对于一些行业和组织来说,数据的安全性和合规性是使用公有云的关键问题之一。因此,公有云等保合规安全解决方案的设计与实现变得至关重要。本文将探讨公有云等保合规安全解…

粘包与拆包

优质博文:IT-BLOG-CN 一、粘包出现的原因 服务端与客户端没有约定好要使用的数据结构。Socket Client实际是将数据包发送到一个缓存buffer中,通过buffer刷到数据链路层。因服务端接收数据包时,不能断定数据包1何时结束,就有可能出…

2024.03.05作业

select实现tcp并发服务器 #include "test.h"#define SER_IP "192.168.42.106" #define SER_PORT 8888int create_socket() {int sfd socket(AF_INET, SOCK_STREAM, 0);if(sfd -1){perror("socket error");exit(-1);}printf("sfd %d\n&q…

flutter开源项目商业化,送给正在迷茫的你

一、掌握架构师筑基必备技能 二、掌握Android框架体系架构 三、学会360全方位性能调优 ![img](https://upload-images.jians 点击领取完整开源项目《安卓学习笔记总结最新移动架构视频大厂安卓面试真题项目实战源码讲义》 hu.io/upload_images/15233518-29138f058c6750b1?ima…

UE5 C++ TPS开发 学习记录(九

p20 首先我们现在有一个多人游戏的系统类MultiplayerSessionsSubsystem 在这个系统内提供了很多会话系统的接口SessionInterface 当现在我们有一些SessionInterfaceDelegates的委托,这个委托的来源是SessionInterface,所以我们使用的委托可以接收到来自SessionInterface的消息(…

大数据开发-Hadoop分布式集群搭建

大数据开发-Hadoop分布式集群搭建 文章目录 大数据开发-Hadoop分布式集群搭建环境准备Hadoop配置启动Hadoop集群Hadoop客户端节点Hadoop客户端节点 环境准备 JDK1.8Hadoop3.X三台服务器 主节点需要启动namenode、secondary namenode、resource manager三个进程 从节点需要启动…

docker 安装rabbitmq并配置hyperf使用

这里我想完成的是 制作消息(多个协程制造)——》推送到rabbitmq——》订阅消息队列——》消费消息(ws协程客户端【一次消费多条】/ws前端) 利用 WebSocket 协议让客户端和服务器端保持有状态的长链接,保存链接上来的客…

二百二十七、Linux——通过shell脚本判断HDFS文件是否存在,如果存在则删除HDFS文件

一、目的 在用脚本去实现对HDFS中过期的ODS层原始数据进行删除后,发现还需要在脚本中对HDFS文件是否存在进行判断,否则如果HDFS文件不存在那么任务执行就会报错 报错原因是这一天的HDFS文件并不存在 原有脚本 #! /bin/bash source /etc/profile nowda…

R语言的数据类型与数据结构:向量、列表、矩阵、数据框及操作方法

R语言的数据类型与数据结构:向量、列表、矩阵、数据框及操作方法 介绍向量列表矩阵数据框 介绍 R语言拥有丰富的数据类型和数据结构,以满足各类数据处理和分析的需求。本文将分享R语言中的数据类型,包括向量、列表、矩阵、数据框等&#xff…

word转PDF的方法 简介快速

在现代办公环境中,文档格式转换已成为一项常见且重要的任务。其中,将Word文档转换为PDF格式的需求尤为突出,将Word文档转换为PDF格式具有多方面的优势和应用场景。无论是为了提高文档的可读性和稳定性、保障文档的安全性和保护机制、还是为了…