JAVA API (三):从基础爬虫构建到带条件数据提取 —— 详解 URL、正则与爬取策略

JAVA API (三):从基础爬虫构建到带条件数据提取 —— 详解 URL、正则与爬取策略

个人主页-爱因斯晨

文章专栏-Java学习

相关文章:API (一)

相关文章:API(二)

持续努力中,感谢支持
在这里插入图片描述

一、爬虫基础

(一)爬虫的基本概念

  • 定义:爬虫是按照一定规则自动抓取网络信息的程序,在 Java 环境下,可借助URLHttpURLConnection等 API 来实现。
  • 应用场景:广泛应用于数据采集,如电商平台的价格监控、各类新闻的聚合;还可用于信息分析,如舆情监测等。

(二)Java 实现简单爬虫的步骤

建立网络连接:利用URL类确定目标网页的地址,再通过openConnection()方法获取HttpURLConnection对象。

URL url =newURL("https://example.com");HttpURLConnection conn =(HttpURLConnection) url.openConnection();

设置请求参数:明确请求方式(GET/POST)以及超时时间等参数。

conn.setRequestMethod("GET"); conn.setConnectTimeout(5000);

获取响应数据:通过输入流读取网页的内容,并将其转换为字符串进行处理。

InputStream in = conn.getInputStream();BufferedReader br =newBufferedReader(newInputStreamReader(in));String line;StringBuilder sb =newStringBuilder();while((line = br.readLine())!=null){ sb.append(line);}

数据解析与提取:结合字符串处理方法或者正则表达式,从网页源码中提取出目标信息,如链接、文本内容等。

(三)爬虫的核心 API

  • URL:代表统一资源定位符,主要功能是标识网络资源的地址。
  • HttpURLConnection:用于发送 HTTP 请求和接收响应,支持设置请求头、获取响应码等操作。
  • 输入流相关类(InputStreamBufferedReader):这些类的作用是读取网络数据。

二、带条件爬取与贪婪爬取

(一)带条件爬取

  • 定义:按照特定规则对目标数据进行筛选,避免无差别地抓取无关信息,从而提高爬取效率。
  • 实现方式:
  • 基于标签筛选:例如只提取<a>标签中的链接,或者<div>中的文本内容。
  • 基于内容关键词:通过字符串的contains()方法或者正则表达式,过滤出包含指定关键词的数据。
  • 示例:爬取网页中所有包含 “Java” 关键词的标题
Pattern pattern =Pattern.compile("<title>(.*?)</title>");Matcher matcher = pattern.matcher(htmlContent);while(matcher.find()){String title = matcher.group(1);if(title.contains("Java")){System.out.println(title);}}

(二)贪婪爬取与非贪婪匹配

  • 贪婪匹配:正则表达式在默认情况下,会尽可能匹配最长的字符串。比如,用.*匹配<div>content1</div>``<div>content2</div>时,会从第一个<div>一直匹配到最后一个</div>
  • 非贪婪匹配:在量词后添加?可实现非贪婪匹配,即尽可能匹配最短的字符串。例如,.*?能够分别匹配两个<div>标签内的内容。
  • 对比示例:
  • 正则表达式"<div>(.*)</div>"(贪婪):匹配结果为 “content1content2”
  • 正则表达式"<div>(.*?)</div>"(非贪婪):匹配结果为 “content1” 和 “content2”

三、正则表达式的核心方法

(一)正则表达式基础语法

  • 常用元字符:.(可匹配任意字符)、*(匹配前导字符 0 次或多次)、+(匹配前导字符 1 次或多次)、?(匹配前导字符 0 次或 1 次)、()(用于分组)等。
  • 预定义字符类:\d(匹配数字)、\w(匹配字母、数字、下划线)、\s(匹配空白字符)等。

(二)Java 中处理正则的两个核心类

Pattern 类:

表示编译后的正则表达式,可通过compile()方法创建实例。

Pattern pattern =Pattern.compile("\\d+");// 匹配1个或多个数字
Matcher 类:

用于对字符串进行匹配操作,常用方法包括:

Matcher matcher = pattern.matcher("abc123def456");while(matcher.find()){System.out.println(matcher.group());// 输出:123、456}
  • find():查找下一个匹配的子序列。
  • group():返回当前匹配的子序列(需要与find()配合使用)。
  • matches():判断整个字符串是否完全匹配正则表达式。

四、实战注意事项

反爬机制规避:

设置合理的请求间隔,可使用Thread.sleep()实现;添加请求头来模拟浏览器,例如设置User-Agent

conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64)");

正则表达式效率优化:

避免使用过度复杂的表达式,对于频繁使用的正则,提前将其编译为Pattern实例,这样可实现复用,减少性能消耗。

合法性与道德规范:

爬取数据时,需遵守网站的robots.txt协议,避免侵犯隐私或者引发法律风险。

Read more

AI 编程工具终极对决:Trae 3.0, Cursor, Qoder, Claude Code, Gemini 全方位评测

AI 编程工具终极对决:Trae 3.0, Cursor, Qoder, Claude Code, Gemini 全方位评测 更新时间:2025年12月 2025 年是 AI 编程工具进化的分水岭。如果说 GitHub Copilot 开启了 “AI 补全” 的 1.0 时代,Cursor 定义了 “AI Native IDE” 的 2.0 时代,那么随着 Trae 3.0、Qoder 的成熟,我们正式进入了 Agentic Coding(代理式编程) 的 3.0 时代。

By Ne0inhk
【AI 学习】解锁Claude Skills:开启AI应用新维度

【AI 学习】解锁Claude Skills:开启AI应用新维度

一、Claude Skills 是什么? 1.1 官方定义剖析 Claude Skills 是 Anthropic 公司为其人工智能模型 Claude 打造的一项创新性的功能扩展机制。从 Anthropic 的官方阐述来看,它本质上是一种标准化的、可复用的模块化系统,旨在赋予 Claude 执行特定领域复杂任务的能力 。通过 Claude Skills,用户能够让 Claude 迅速化身为专业领域的 “专家”,完成从常规的文本处理到复杂的业务流程自动化等多样化任务。 举例来说,在文档处理领域,以往使用普通的 AI 模型处理合同文档时,可能需要多次详细地输入指令,要求其提取关键条款、检查格式规范等,且每次处理都需重复这些指令,而借助 Claude Skills,用户只需创建一个专门用于合同处理的 Skill,将合同处理的流程、关键信息提取规则等内容封装其中,后续再处理合同时,Claude 就能自动调用该 Skill,

By Ne0inhk

用快马AI一键实现图片转CAD:释放设计效率新高度

快速体验 1. 打开 InsCode(快马)平台 https://www.inscode.net 2. 点击'项目生成'按钮,等待项目生成完整后预览效果 输入框内输入如下内容: 开发一个图片转CAD的在线工具,用户上传JPG/PNG图片后,AI自动识别图片中的线条、文字和图形,转换为可编辑的DWG/DXF格式CAD文件。支持调整识别精度、线条平滑度和图层分离。提供实时预览功能,用户可以在转换前调整参数,转换后可直接下载或在线编辑。集成Kimi-K2模型进行图像识别和矢量转换,确保高精度输出。一键部署上线,方便团队协作和文件共享。 作为一名经常需要处理设计图纸的工程师,我一直在寻找能快速将手绘草图或扫描图片转为CAD文件的工具。最近尝试了InsCode(快马)平台的图片转CAD功能,整个过程流畅得让人惊喜。这里记录下我的使用体验和技术实现思路。 1. 核心需求分析 传统图片转CAD需要繁琐的手动描图,而AI技术可以自动识别线条、文字和封闭图形。我们需要的是能处理不同清晰度图片,支持参数调整,并输出分层矢量化CAD文件的服务。 2.

By Ne0inhk
【AI大模型】Spring AI 基于mysql实现对话持久存储详解

【AI大模型】Spring AI 基于mysql实现对话持久存储详解

目录 一、前言 二、Spring AI 记忆功能概述 2.1 Spring AI会话记忆介绍 2.2 常用的会话记忆存储方式 2.2.1 集成数据库持久存储会话实现步骤 三、基于MySql实现会话记忆的实现过程 3.1 ChatMemory 介绍 3.2 ChatMemory的几种实现 3.2.1 InMemoryChatMemory 3.2.2 MessageWindowChatMemory  3.2.3 MessageChatMemoryAdvisor 3.3 基于mysql实现会话记忆存储思路 四、基于mysql实现会话记忆操作过程 4.1 自定义ChatMemory实现会话记忆存储 4.1.1

By Ne0inhk