news 2026/5/8 4:41:35

Java爬虫详解,零基础小白到精通,收藏这篇就够了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java爬虫详解,零基础小白到精通,收藏这篇就够了
文章目录
  • 一、引入
  • 二、Pattern类
  • 三、Matcher类
  • 四、本地爬虫
    • 1)第一步:获取正则表达式(Pattern)的对象
    • 2)第二步:获取文本匹配器的对象
    • 3)完整代码
  • 五、网络数据爬取(了解)
  • 六、练习

一、引入

正则表达式有两个作用

作用一我们已经学习完毕了,接下来来学习它的第二个作用,这个动作其实也就是我们之前经常听到的两个字:爬虫,我们可以从一大段网络文字中去爬取我们想要的数据。

爬取数据的时候有两种方式:本地爬虫和网络爬虫

在正式爬取之前,需要先知道两个类


二、Pattern类

它是在java.util.regex包中的,这个类就表示正则表达式

因此如果获取到了一个Pattern类的对象,相当于就是获取到了一个正则表达式的对象。


三、Matcher类

它也是java.util.regex包中的,这个类就表示文本匹配器,它的作用就是:按照正则表达式的规则去读取字符串,而且是从头开始读取。

在读取的时候它会去找符合匹配规则的子串。


四、本地爬虫

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

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

要求:找出里面所有的JavaXX


1)第一步:获取正则表达式(Pattern)的对象

Pattern对象不能直接new,需要通过compile()静态方法获取,在compile()方法中的参数位置就可以去写正则表达式。

Pattern.compile("Java\\d{0,2}");

方法会返回一个Pattern类的对象,说白了就是后面这个Java\\d{0,2}正则表达式的对象

Pattern p = Pattern.compile("Java\\d{0,2}");

2)第二步:获取文本匹配器的对象

matcher()形参中传入的是需要爬取的文本(字符串),方法返回的是一个文本匹配器的对象。

m:文本匹配器的对象,str:需要爬取的文本,p:规则。

因此:m要在str中找符合p规则的小串

Matcher m = p.matcher(str);

使用find()方法,方法返回值为boolean

该方法会拿着文本匹配器从头开始读取,寻找是否有满足规则的子串。

如果没有,方法返回false;如果有,方法返回true

在底层它还会去记录子串的起始索引结束索引 + 1

m.find()

光告诉我有没有 / 索引还不行,我还得讲里面的数据拿出来才行,此时就需要调用group()方法。

这个方法的底层就会根据find()方法记录的索引进行字符串的截取。

字符串的截取可以传两个参数:substring(起始索引, 结束索引),而且它的特点是:包头不包尾。

通过这个方法就知道了,find()记录的结束索引需要+ 1的原因了。

截取完后,它会把截取的小串进行返回。

boolean b = m.find(); String s = m.group(); System.out.println(s); // Java

但此时代码还没写完,它仅仅只是截取了一个,后面还有很多数据没爬取,因此此时我们需要继续往后读取。

在第二次调用find()方法的时候,会继续读后面的内容。

读取到第二个满足要求的子串时,方法会继续返回true

并把第二个子串的起始索引结束索引 + 1进行记录。

此时我们就可以再次调用group()方法进行截取。

b = m.find(); // 第二次调用group方法的时候,会根据find()方法记录的索引再次截取子串,并将这个子串进行返回。 String s2 = m.group(); System.out.println(s); // Java

但是代码到这还没结束,因为文本中有多少满足要求的子串我们并不知道,因此此时我们需要使用循环改进。由于不知道要循环多少次,所以这里使用while循环

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

3)完整代码

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

五、网络数据爬取(了解)

需求:把链接 https://www.pv138.com/idCard/list/ 中所有的身份证号码都爬取出来。

这个网址中有很多身份证号码和名字。

由于网络里面的知识点我们还没有进行学习,因此在这里你知道这么做就行了,混个眼熟,不需要你去练。

public class RegexDemo7 { public static void main(String[] args) throws IOException { /* 扩展需求2: 把连接:https://www.pv138.com/idCard/list/ 中所有的身份证号码都爬取出来。 */ //创建一个URL对象,URL就可以把它理解成是一个网址对象 URL url = new URL("https://www.pv138.com/idCard/list/"); //openConnection():打开连接,即连接上这个网址 //细节:在运行这行代码的时候需要保证网络是畅通 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) { // 这里打印的就是我这行读取到的数据 System.out.println(line); } br.close(); } }

运行上面代码,可以发现控制台中打印的信息都是我们刚刚读取到的。

但是这里面并不是所有的数据都是我想用的,我只想用里面的身份证号码怎么办?

此时就可以去用我们刚刚讲解的PatternMathcer完成

//获取正则表达式的对象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()); } }

运行程序看下结果:可以发现所有的身份证号码都被爬取出来了


六、练习

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

来黑马程序员学习Java,手机号:18512516758,18512508907或者联系邮箱:boniu@itcast.cn,座机电话:01036517895,010-98951256邮箱:bozai@itcast.cn,热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090

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} 座机电话的正则表达式:θ\d{2,3}-?[1-9]\d{4,9}

接下来我们就是要来写第四个正则:热线电话

400-?[1-9]\\d{2}-?[1-9]\\d{3}

现在我们要做的就是:将大串s中的符合上面四种格式的小串都获取出来。

即:只要这个小串满足这四个正则表达式之一,就会把你获取出来

String regex = "()|()|()|()";

由于完整代码比较长可以做一个换行,直接在要换行的地方回车就行了,IDEA会帮你自动去做字符串的拼接的。

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

完整代码

public class RegexDemo8 { 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"; System.out.println("400-618-9090"); 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); } }

根据最近的行业调研和招聘数据,AI的发展确实对Java工程师提出了新挑战,但也带来了明确的转型机遇。其现状可概括为:市场分化明显,初级岗位收缩,但“Java+AI”的复合型人才需求正在崛起。

🛠️ 给Java工程师的转型行动建议

转变核心角色定位

构建“Java + AI”双技能栈:

从“用AI辅助编程”开始实践

选择垂直领域深耕

因此捕获AI,掌握技术是关键,让AI成为我们最便利的工具.

一定要把现有的技术和大模型结合起来,而不是抛弃你们现有技术!掌握AI能力的Java工程师比纯Java岗要吃香的多。

即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地!大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇!

如何学习AGI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享**

一、2025最新大模型学习路线

一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1级别:AI大模型时代的华丽登场

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理,关键技术,以及大模型应用场景;通过理论原理结合多个项目实战,从提示工程基础到提示工程进阶,掌握Prompt提示工程。

L2级别:AI大模型RAG应用开发工程

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3级别:大模型Agent应用架构进阶实践

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体;同时还可以学习到包括Coze、Dify在内的可视化工具的使用。

L4级别:大模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调;并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握;而L3 L4更多的是通过项目实战来掌握大模型的应用开发,针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。

二、大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

三、大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

四、大模型项目实战

学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

五、大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 0:55:54

探索 DSPLLC 开关电源模块设计的宝藏世界

DSPLLC开关电源模块设计资料DSP数字LLC电源源代码原理图软件学习,包含磁件设计、软件设计报告、硬件设计报告、硬件原理、主功率计算书、LLC环路设计、仿真、BOM、使用说明,调试波形等全面且详细的全套资料最近在研究电源相关的技术,发现了一…

作者头像 李华
网站建设 2026/5/7 1:46:25

基于推荐算法的校园电子图书听书系统

Spring Boot基于推荐算法的校园电子图书听书系统是一个专为校园师生设计的数字化阅读平台。以下是对该系统的详细介绍: 一、系统背景与目的 随着信息技术的不断发展,数字化阅读已经成为校园阅读的新趋势。为了满足校园师生对电子图书和听书资源的需求&am…

作者头像 李华
网站建设 2026/5/7 1:48:04

9年➕前端开发经验,失业两个月,选择困难

这是前端程序员在某红薯平台自述前端被裁的真实经历! 2025开年,AI技术打得火热,正在改变前端人的职业命运: 阿里云核心业务全部接入Agent体系; 字节跳动30%前端岗位要求大模型开发能力; 腾讯、京东、百度开…

作者头像 李华
网站建设 2026/5/7 18:49:19

16、系统管理:系统维护脚本全解析

系统管理:系统维护脚本全解析 在系统管理的日常工作中,脚本的运用至关重要。它能帮助管理员高效地完成诸如进程管理、任务调度验证以及系统定时任务执行等任务。下面将详细介绍几个实用脚本的工作原理、运行方法及可能的改进方向。 1. killall 脚本 killall 脚本用于匹配并…

作者头像 李华
网站建设 2026/5/5 8:24:44

JAVA不好找工作了

这是小红书上一位35岁Java开发员找不到工作的真实经历。 说真的,这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型,挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis,稳稳当当过日子。 结果GPT、DeepSee…

作者头像 李华