当前位置: 首页 > news >正文

Java爬虫入门:从网页抓取到数据提取(正则表达式篇)

  在当今信息爆炸的时代,如何从浩瀚的互联网中快速、准确地获取所需数据成为了一个重要的技能。网络爬虫技术应运而生,它允许我们自动化地访问网页并提取其中的信息。Java作为一门功能强大且拥有丰富生态的编程语言,在构建网络爬虫方面也表现出色。

很多时候,我们并不需要网页的全部内容,而仅仅是对其中符合特定格式或特征的数据感兴趣,例如:电子邮件地址、电话号码、特定商品的链接或价格、或者像本例中将要演示的——身份证号码格式的字符串。这时,强大的**正则表达式(Regular Expression)**就派上了用场。它能帮助我们定义复杂的文本匹配规则,从而在抓取到的网页源码中精确地筛选和提取出目标数据。

本文将通过一个具体的Java代码示例,演示如何结合使用Java的网络编程API(URL, URLConnection)和正则表达式库(java.util.regex),实现以下目标:

  1. 连接到指定的网页URL。

  2. 读取网页的HTML源代码。

  3. 利用预定义的正则表达式,在源代码中查找并提取所有符合特定模式的数据(以提取类似身份证号码的18位数字串为例)。

让我们一步步深入代码,了解其工作原理。

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:把连接中所有的号码都爬取出来。*///创建一个URL对象URL url = new URL("https://new.gugu**.com/sfz");//连接上这个网址//细节:保证网络是畅通URLConnection conn = url.openConnection();//创建一个对象去读取网络中的数据BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;//获取正则表达式的对象patternString 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();}
}

http://www.xdnf.cn/news/155719.html

相关文章:

  • 单例设计模式之懒汉式以及线程安全问题
  • 【计算机视觉】CV项目实战- 深度解析TorchVision_Maskrcnn:基于PyTorch的实例分割实战指南
  • 从“拼凑”到“构建”:大语言模型系统设计指南!
  • 【Vue】Vue3项目创建
  • 美团Java后端二面面经!
  • 【数论分块】数论分块算法模板及真题
  • # 家庭网络IPv6地址的一些知识
  • 思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)
  • 基于MTF的1D-2D-CNN-BiLSTM-Attention时序图像多模态融合的故障分类识别(Matlab完整源码和数据),适合研究学习,附模型研究报告
  • Leetcode刷题 由浅入深之哈希法——454. 四数相加Ⅱ
  • Logi Options+ 的 Flow:端口信息
  • 驱动开发(1)|鲁班猫rk356x内核编译,及helloworld驱动程序编译
  • 微信小程序核心技术栈
  • ORACLE数据库备份入门:第四部分:2-备份场景举例
  • 计算机视觉——对比YOLOv12、YOLOv11、和基于Darknet的YOLOv7的微调对比
  • MyBatis 官方子项目详细说明及表格总结
  • JavaScript基础知识合集笔记1——数据类型
  • TDengine 中的压缩设计
  • 毕业项目-Web入侵检测系统
  • 关于TCP三次握手和四次挥手的疑点
  • 游戏状态管理:用Pygame实现场景切换与暂停功能
  • Unity-Shader详解-其一
  • MySQL多查询条件下深度分页性能优化技巧及示例总结
  • Pytorch(无CPU搭建)+Jupyter
  • Unity-Shader详解-其二
  • 【WLAN】华为无线AC双机热备负载分担—双链路热备份
  • 【数据融合】基于拓展卡尔曼滤波实现雷达与红外的异步融合附matlab代码
  • C++异步并发支持库future
  • 探针台的具体分类有哪些
  • 基于pandoc的MarkDown格式与word相互转换小工具开发(pyqt5)