11.爬虫

前言:

正则表达式的作用:

  • 作用一:校验字符串是否满足规则

  • 作用二:在一段文本中查找满足要求的内容


一.Pattern类和Matcher类:

1.Pattern类:表示正则表达式

a.因此获取Pattern对象就相当于获取正则表达式的对象;

b.compile方法:获取正则表达式的对象,compile方法的形参就是要写的正则表达式

注:因为compile方法是静态的即被static修饰,所以通过类名.方法名去调用compile方法即Pattern.compile来获取正则表达式的对象(获取获取正则表达式的对象不能new)

matcher方法:形参是要爬取的大串

2.Matcher类:文本匹配器,作用:按照正则表达式的规则去读取字符串(注:从头开始读取),在大串中去找符合匹配规则的子串

a. find方法:

针对形参为空的find方法:拿着文本匹配器从头开始读取,寻找是否有满足规则的子串 如果没有,find方法返回false 如果有,find方法返回true,在底层记录子串的起始索引和结束索引+1

b. group方法:该方法底层会根据find方法记录的索引进行字符串的截取,会把截取的子串进行返回 方法substring(起始索引,结束索引)->包头不包尾,所以上面结束索引加1,上述例子即[0,4)即[0,3]

方法substring:类String里的方法

二.本地爬虫:

题目:

代码:

初级:

package a09RegexDemo;
​
import java.util.regex.Matcher;
import java.util.regex.Pattern;
​
public class RegexDemo1 {public static void main(String[] args) {String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
​//1.获取正则表达式的对象Pattern p = Pattern.compile("Java[0-9]{0,2}");//也可以是Java\\d{0,2}
​//2.获取文本匹配器的对象/* m:文本匹配器的对象str:大串p:规则m要在str中找符合p规则的小串  */Matcher m = p.matcher(str);
​//3.拿着文本匹配器从头开始读取,寻找是否有满足规则的子串/*如果没有,find方法返回false如果有,find方法返回true,在底层记录子串的起始索引和结束索引+1 *///比如:str大串中第一个符合规则的子串为一开始的Java,它在大串中的起始索引为0,结束索引加1为3+1即4,此时底层记录0和4boolean b = m.find();
​//4.group方法底层会根据find方法记录的索引进行字符串的截取,会把截取的子串进行返回//方法substring(起始索引,结束索引)->包头不包尾,所以上面结束索引加1,上述例子即[0,4)即[0,3]String s1 = m.group();
​//5.打印System.out.println(s1);//运行结果为Java,此时找到第一个匹配的子串就会停}
}
​

中级:

package a09RegexDemo;
​
import java.util.regex.Matcher;
import java.util.regex.Pattern;
​
public class RegexDemo1 {public static void main(String[] args) {String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
​//1.获取正则表达式的对象Pattern p = Pattern.compile("Java[0-9]{0,2}");//也可以是Java\\d{0,2}
​//2.获取文本匹配器的对象/* m:文本匹配器的对象str:大串p:规则m要在str中找符合p规则的小串  */Matcher m = p.matcher(str);
​//3.拿着文本匹配器从头开始读取,寻找是否有满足规则的子串/*如果没有,find方法返回false如果有,find方法返回true,在底层记录子串的起始索引和结束索引+1 *///比如:str大串中第一个符合规则的子串为一开始的Java,它在大串中的起始索引为0,结束索引加1为3+1即4,此时底层记录0和4boolean b = m.find();
​//4.group方法底层会根据find方法记录的索引进行字符串的截取,会把截取的子串进行返回//方法substring(起始索引,结束索引)->包头不包尾,所以上面结束索引加1,上述例子即[0,4)即[0,3]String s1 = m.group();
​//5.打印System.out.println(s1);//运行结果为Java,此时找到第一个匹配的子串就会停
​//第二次再调用find方法,就会继续读取后面的内容/*之前已读取到4索引上,此时继续从4索引开始读取*///读取到第二个满足要求的子串,方法会继续返回true,并把第二个子串的起始索引和结束索引加1进行记录b=m.find();
​//第二次调用group方法的时候,会根据find方法记录的索引再次截取子串String s2=m.group();
​//打印System.out.println(s2);//运行结果为Java8,此时找到第二个匹配的子串就会停}
}

终极:用循环找出所需要的全部子串

package a09RegexDemo;
​
import java.util.regex.Matcher;
import java.util.regex.Pattern;
​
public class RegexDemo1 {public static void main(String[] args) {String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
​//1.获取正则表达式的对象Pattern p = Pattern.compile("Java[0-9]{0,2}");//也可以是Java\\d{0,2}//2.获取文本匹配器的对象/*拿着m去读取str,找符合p规则的子串*/Matcher m = p.matcher(str);//3.核心:利用循环读取/*由于不知道符合规则的子串有几个,因此可用while循环*//* m.find()作为循环条件,一直读取,读取到就返回true,之后进行下一轮的读取,一旦读取到false,就说明大串中没有要找的子串了,查找停止 */while (m.find()){String s = m.group();System.out.println(s);}}
}

三.网络爬虫:

1.类URL:

a.针对只有一个形参的构造方法:该构造方法的形参可以是要爬取的网址,抛出异常MalformedURLException;

b.URL对象即网址对象;

c.方法openConnection:用来打开网址,返回类URLConnection,相当于打开网址后创建网址对象

2.类URLConnection:用来连接创建的网址对象,注:要保证网址畅通

方法getInputStream:返回的数据类型为InputStream

3.类InputStreamReader:

构造方法:一共有4个,每个构造方法的形参的类型都有InputStream

4.类BufferedReader

a.方法readLine:返回String型,在读取的时候每次读取一整行,从第一行开始,注:不是所有信息

b.方法close:

5.代码演示:

网课中:

实操:

package a09RegexDemo;
​
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
​
public class RegexDemo2 {public static void main(String[] args) throws IOException {/*需求:爬取链接中的数据*/
​//1.创建一个URL对象URL url = new URL("https://dasai.lanqiao.cn/??/");
​//2.连接上这个网址/*注:要保证网址畅通*/URLConnection conn = url.openConnection();
​//3.创建一个对象去读取网络中的数据BufferedReader br = new BufferedReader( new InputStreamReader( conn.getInputStream() ));
​String line;
​//4.循环进行读取/*在读取的时候每次读取一整行,从第一行开始,注:不是所有信息*/while ( (line=br.readLine()) != null){System.out.println(line);}
​//5.关闭br.close();}
}

四.练习:

题目:

代码:

package a09RegexDemo;
​
import java.util.regex.Matcher;
import java.util.regex.Pattern;
​
public class RegexDemo3 {public static void main(String[] args) {String s="来黑马程序员学习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}//座机电话的正则表达式为0\\d{2,3}-?[1-9]\\d{4,9}//热线电话的正则表达式400-?[1-9]\\d{2}-?[1-9]\\d{3}
​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.xdnf.cn/news/33843.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速,租房市场日益繁荣&a…

Linux里面实时查看项目的tomcat服务器日志文件

目录 前言 一、查看tomcat服务器日志 二、运行项目验证(篇外) (一)运行自己的项目 二、发送验证码测试 前言 这个可以查看在Linux系统里面部署运行项目的日志,日志内可以查看到运行和各种错误以及前后端交互传输的各种数据,…

12,攻防世界simple_php

simple_php 题目来源:Cyberpeace-n3k0 题目描述: 小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 进入靶场 这段PHP代码是一个简单的web应用示例,让我们逐步分析这段代码: show_source(__FILE__);:这行代码会显示当前文件的…

Webpack Tree Shaking 技术原理及应用实战,优化代码,精简产物

前言 在前端开发中,优化代码体积和提升应用性能是至关重要的课题。Webpack 提供了多种优化手段来帮助开发者实现这一目标,Tree Shaking 就是其中一种非常重要的优化技术,它通过在编译阶段移除未被使用的代码模块,从而显著减小最终…

5G CPE核心器件-基带处理器(三)

5G CPE 核心器件 -5G基带芯片 基带芯片简介基带芯片组成与结构技术特点与发展趋势5G基带芯片是5G CPE中最核心的组件,负责接入5G网络,并进行上下行数据业务传输。移动通信从1G发展到5G,终端形态产生了极大的变化,在集成度、功耗、性能等方面都取得巨大的提升。 基带芯片简…

SpringBoot高级-底层原理

目录 1 SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 02-SpringBoot2高级-自动化配置初体验 03-SpringBoot2高级-底层原理-Configuration配置注解 04-SpringBoot2高级-底层原理-Import注解使用1 05-SpringBoot2高级-底层原理-Import注解使用2 06-S…

ES常见问题汇总

ES常见问题汇总 1.Es的作用(elasticsearch) 作用: elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 ELK技术栈 elasticsearch结合kibana、Logstash&…

linux环境宝塔服务部署安装及介绍

一、简介 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文件管理器,可视化软件管理器,可视化C…

ONES 功能上新|ONES Project 甘特图再度升级

ONES Project 甘特图支持展示工作项标题、进度百分比、依赖关系延迟时间等信息。 应用场景: 在使用甘特图规划项目任务、编排项目计划时,可以对甘特图区域进行配置,展示工作项的工作项标题、进度百分比以及依赖关系延迟时间等维度&#xff0c…

跨域请求限制的通俗解释

什么是跨域 想象一下,每个网站就像一个独立的小国家,有自己的边界(域名)。比如,https://example1.com是一个国家,https://example2.com是另一个国家。浏览器就像是这些国家之间的海关,它会检查从…

javascript删除对象属性

1、操作符 delete object.property const obj {age: 19,name: hanmeimei, } delete obj.age2、Reflect.deleteProperty(object, propertyKey) 还会返回布尔值 const obj {age: 19,name: hanmeimei, } Reflect.deleteProperty(obj, name)

Linux 查看系统资源常用命令

目录 Linux 查看系统资源常用命令 一、top 二、htop 三、vmstat 四、iostat 五、mpstat 六、free 七、sar 八、ps 九、pstree 十、lsof 十一、uptime 十二、dmesg 十三、dmidecode 十四、lsblk 十五、blkid 十六、fdisk -l 十七、parted -l 十八、df -h 十…

【text2sql】低资源场景下Text2SQL方法

SFT使模型能够遵循输入指令并根据预定义模板进行思考和响应。如上图,、 和 是用于通知模型在推理过程中响应角色的角色标签。 后面的内容表示模型需要遵循的指令,而 后面的内容传达了当前用户对模型的需求。 后面的内容代表模型的预期输出,也…

楼盘智能化的关键技术:数字孪生如何落地?

随着智慧城市的不断发展,数字孪生技术逐渐成为实现智慧楼盘管理和运营的核心技术之一。通过创建与现实楼盘一一对应的虚拟模型,数字孪生不仅能够提供更加全面、动态的楼盘信息展示,还能为楼盘的建设、管理和用户体验优化提供精准的数据支持和…

Jupyter Notebook认识、安装和启动以及使用

Jupyter Notebook认识、安装和启动以及使用 Jupyter Notebook认识、安装和启动以及使用 Jupyter Notebook认识、安装和启动以及使用一、认识Jupyter Notebook1.1 Jupyter Notebook概述1.2 Jupyter Notebook 重要特性(1)交互式代码执行(2)支持多种编程语言(3)富文本编辑(4)代码高…

【3D AIGC】Img-to-3D、Text-to-3D、稀疏重建(2024年文章汇总)

文章目录 1. Wonderworld:拓展图片边界,生成3D场景2. 3DTopia-XL:扩散模型辅助生成3. 3DGS-Enhancer: 通过视图一致2D Diffusion,提升无界3D Gaussian Splatting (NlPs2024 Spotlight)4. L3DG:Latent 3D Gaussian Diff…

【React】二、状态变量useState

文章目录 1、React中的事件绑定1.1 基础事件绑定1.2 使用事件对象参数1.3 传递自定义参数1.4 同时传递事件对象和自定义参数 2、React中的组件3、useState 1、React中的事件绑定 1.1 基础事件绑定 语法:on 事件名称 { 事件处理程序 },整体上遵循驼峰…

RNACOS:用Rust实现的Nacos服务

RNACOS是一个使用Rust语言开发的Nacos服务实现,它继承了Nacos的所有核心功能,并在此基础上进行了优化和改进。作为一个轻量级、快速、稳定且高性能的服务,RNACOS不仅包含了注册中心、配置中心和Web管理控制台的功能,还支持单机和集…

嵌入式蓝桥杯学习3 外部中断实现按键

Cubemx配置 前面的配置依旧一样。 原文链接:https://blog.csdn.net/m0_74246768/article/details/144227188 1.打开cubemx,将PB0到PB1配置为GPIO_EXTI模式。 2.在System-Core中点击GPIO,选择PB0到PB2, GPIO_Mode(触…

框架模块说明 #06 二次验证(MFA)_01

背景 在用户登录或执行敏感操作时,我们引入了二次验证机制,以全面提升后台安全性。具体而言: 登录时的图形验证:通过图形验证码,有效防范恶意攻击和自动化脚本,确保初始登录的安全性。针对海外用户的 TG …