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

深入解析:Jsoup 库的多功能应用场景

Jsoup 是一个强大的 Java 库,主要用于解析和操作 HTML 文档。它不仅广泛应用于网络爬虫和数据抓取,还在网页内容分析、数据清洗与处理、自动化测试等多个领域有着广泛的应用。本文将详细介绍 Jsoup 库的多种用途,并提供具体的代码示例。

一、Jsoup 的主要用途

(一)网络爬虫与数据抓取

Jsoup 是网络爬虫开发中的常用工具,能够从网页中提取所需的数据。无论是静态页面还是通过 JavaScript 动态加载的内容,Jsoup 都可以轻松应对。

示例代码:从网页中抓取数据
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.IOException;public class WebScraper {public static void main(String[] args) {String url = "https://example.com";try {Document document = Jsoup.connect(url).get();Elements paragraphs = document.select("p");for (Element paragraph : paragraphs) {System.out.println(paragraph.text());}} catch (IOException e) {e.printStackTrace();}}
}

(二)网页内容分析

Jsoup 可以用于分析网页内容,例如提取关键词、统计标签出现次数等。这对于搜索引擎优化、网页分析等领域非常有用。

示例代码:提取网页标题和段落
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.IOException;public class WebAnalyzer {public static void main(String[] args) {String url = "https://example.com";try {Document document = Jsoup.connect(url).get();String title = document.title();System.out.println("Title: " + title);Elements paragraphs = document.select("p");for (Element paragraph : paragraphs) {System.out.println(paragraph.text());}} catch (IOException e) {e.printStackTrace();}}
}

(三)数据清洗与处理

在云计算和大数据领域,Jsoup 可以帮助开发人员解析 HTML 文档,提取出需要的数据,并进行进一步的处理和分析。

示例代码:清洗和处理网页数据
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.IOException;public class DataCleaner {public static void main(String[] args) {String html = "<html><head><title>Sample</title></head><body><p>Sample text</p></body></html>";Document document = Jsoup.parse(html);Elements paragraphs = document.select("p");for (Element paragraph : paragraphs) {System.out.println(paragraph.text().trim());}}
}

(四)自动化测试

Jsoup 可以用于自动化测试,例如验证网页内容是否符合预期。

示例代码:自动化测试网页内容
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.IOException;public class WebTester {public static void main(String[] args) {String url = "https://example.com";try {Document document = Jsoup.connect(url).get();Elements headers = document.select("h1");for (Element header : headers) {System.out.println(header.text());}} catch (IOException e) {e.printStackTrace();}}
}

二、Jsoup 的高级功能

(一)CSS 选择器的深入应用

Jsoup 支持 CSS 选择器,这使得您可以以一种非常直观和强大的方式来选择页面上的元素。

示例代码:使用 CSS 选择器
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;public class CssSelectorExample {public static void main(String[] args) {String html = "<html><head><title>Test</title></head><body><p class='myclass'>Hello World!</p></body></html>";Document doc = Jsoup.parse(html);Elements elements = doc.select(".myclass");System.out.println(elements.size()); // 输出: 1System.out.println(elements.get(0).text()); // 输出: Hello World!}
}

(二)处理动态内容

对于动态加载的内容,Jsoup 可以结合 Selenium 等工具来模拟浏览器行为,获取完整的页面内容。

示例代码:结合 Selenium 处理动态内容
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;public class DynamicContentScraper {public static void main(String[] args) {System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");WebDriver driver = new ChromeDriver();driver.get("https://example.com");String pageSource = driver.getPageSource();driver.quit();Document doc = Jsoup.parse(pageSource);System.out.println(doc.title());}
}

三、注意事项与合规建议

(一)遵守法律法规

在进行网页爬取时,必须遵守相关法律法规,尊重网站的 robots.txt 文件规定,合理设置爬取频率,避免对网站造成负担。

(二)处理异常情况

在编写爬虫程序时,要考虑到可能出现的异常情况,如请求失败、页面结构变化等。可以通过捕获异常和设置重试机制来提高程序的稳定性。

(三)数据存储

获取到的数据可以存储到文件或数据库中,以便后续分析和使用。

四、总结

Jsoup 是一个功能强大的 Java 库,广泛应用于网络爬虫、数据抓取、网页内容分析、数据清洗与处理等多个领域。通过合理利用 Jsoup 的功能,可以高效地完成各种任务,同时确保数据使用的合法性和合规性。希望本文能为你在相关领域的开发提供一些帮助。如果你在使用 Jsoup 过程中遇到任何问题,欢迎随时交流。

相关文章:

深入解析:Jsoup 库的多功能应用场景

Jsoup 是一个强大的 Java 库&#xff0c;主要用于解析和操作 HTML 文档。它不仅广泛应用于网络爬虫和数据抓取&#xff0c;还在网页内容分析、数据清洗与处理、自动化测试等多个领域有着广泛的应用。本文将详细介绍 Jsoup 库的多种用途&#xff0c;并提供具体的代码示例。 一、…...

直接抓取网页的爬虫技术:限制与合规挑战

在利用爬虫技术直接抓取网页内容时&#xff0c;尤其是针对像淘宝这样的大型电商平台&#xff0c;开发者可能会面临诸多技术限制和法律风险。这些限制不仅影响爬虫的效率&#xff0c;还可能引发法律问题。因此&#xff0c;了解这些限制并采取合规措施至关重要。 一、直接抓取网…...

docker常用命令及案例

以下是 Docker 的所有常用命令及其案例说明&#xff0c;按功能分类整理&#xff1a; 1. 镜像管理 1.1 拉取镜像 命令: docker pull <镜像名>:<标签>案例: 拉取官方的 nginx 镜像docker pull nginx:latest1.2 列出本地镜像 命令: docker images案例: 查看本地所有…...

【Redis】redis 存储的列表如何分页和检索

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

2025.2.6 数模AI智能体大更新,更专业的比赛辅导,同提示词效果优于gpt-o1/o3mini、deepseek-r1满血

本次更新重新梳理了回复逻辑规则&#xff0c;无任何工作流&#xff0c;一共3.2k字细节描述。具体效果可以看视频&#xff0c;同时也比对了gpt-o1、gpt-o3mini、deepseek-r1-67BI&#xff0c;从数学建模题目解答上来看&#xff0c;目前我的数模AI智能体具有明显优势。 AI智能体优…...

如何在 Linux 中管理自定义脚本:将 ~/bin 目录添加到 $PATH

1. 前言 在 Linux Shell 中&#xff0c;$PATH 是一个非常重要的环境变量&#xff0c;它决定了系统在哪里寻找可执行命令。通过为 $PATH 添加自定义目录&#xff0c;你就能在任意位置方便地调用自己写的脚本或程序。本文将围绕这一主题&#xff0c;结合示例脚本 mycmd 以及 .ba…...

[LUA ERROR] bad light userdata pointer

Cocos2d项目&#xff0c;targetSdkVersion30&#xff0c;在 android 13 设备运行报错: [LUA ERROR] bad light userdata pointer &#xff0c;导致黑屏。 参考 https://blog.csdn.net/sdsabc2000/article/details/135384162的方法 下载最新的Cocos2dx 4.0,将其中的luajit &am…...

cursor指令工具

Cursor 工具使用指南与实例 工具概览 Cursor 提供了一系列强大的工具来帮助开发者提高工作效率。本指南将通过具体实例来展示这些工具的使用方法。 1. 目录文件操作 1.1 查看目录内容 (list_dir) 使用 list_dir 命令可以查看指定目录下的文件结构: 示例: list_dir log…...

【玩转全栈】----Django模板语法、请求与响应

目录 一、引言 二、模板语法 三、传参 1、视图函数到模板文件 2、模板文件到视图函数 四、引入静态文件 五、请求与响应 ?1、请求 2、响应 六、综合小案例 1、源码展示 2、注意事项以及部分解释 3、展示 一、引言 像之前那个页面&#xff0c;太过简陋&#xff0c;而且一个完整…...

2025年2月9日(数据分析,在最高点和最低点添加注释,添加水印)

要在最高点和最低点添加文本注释,可以使用 plt.annotate() 函数。这个函数允许你在图表中的特定位置添加文本注释,并且可以指定箭头指向特定的数据点。 以下是修改后的代码,添加了在最高点和最低点的文本注释: from matplotlib import pyplot as plt from matplotlib imp…...

C++,设计模式,【单例模式】

文章目录 一、模式定义与核心价值二、模式结构解析三、关键实现技术演进1. 基础版(非线程安全)2. 线程安全版(双重检查锁)3. 现代C++实现(C++11起)四、实战案例:全局日志管理器五、模式优缺点深度分析✅ 核心优势⚠️ 潜在缺陷六、典型应用场景七、高级实现技巧1. 模板化…...

今日AI和商界事件(2025-02-08)

今日AI领域的重大事件主要包括以下几个方面&#xff1a; 一、DeepSeek引发的行业震动 事件概述&#xff1a;DeepSeek作为近期崛起的AI模型&#xff0c;以其低成本、高性能的推理能力引发了广泛关注。其开源策略、独特的出身以及强大的算力表现&#xff0c;使得微软、英伟达等…...

C# LINQ与集合类 数据操作

目录 LINQ语法 过滤数据 投影数据 排序数据 集合操作 聚合操作 分组操作 查找元素 其他操作 常用的集合类 List LinkedList HashSet Dictionary List&#xff1a;动态数组 LinkedList&#xff1a;双向链表 HashSet&#xff1a;唯一无序集合 Dictionary&…...

开源流程引擎对比:compileflow、Turbo、Warm-Flow、 flowable、activiti

文章目录 开源流程引擎对比I 工作流引擎阿里的Compileflowflowableactivitiwarm-flow(国产)Turbo (didiopensource)II 知识扩展开发流程开源流程引擎对比 ActivitiCamundaCompileflowturbo核心表量282205特性 中断可重入√√√支持回滚√√运行模式独立运行和内嵌独立运行和…...

golang使用sqlite3,开启wal模式,并发读写

因为sqlite是基于文件的&#xff0c;所以默认情况下&#xff0c;sqlite是不支持并发读写的&#xff0c;即写操作会阻塞其他操作&#xff0c;同时sqlite也很容易就产生死锁。 但是作为一个使用广泛的离线数据库&#xff0c;从sqlite3.7.0版本开始&#xff08;SQLite Release 3.…...

基于yolov11的阿尔兹海默症严重程度检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的阿尔兹海默症严重程度检测系统是一种创新的医疗辅助工具&#xff0c;旨在通过先进的计算机视觉技术提高阿尔兹海默症的早期诊断和病情监测效率。阿尔兹海默症是一种渐进性的神经退行性疾病&#xff0c;通常表现为认知障碍、记忆丧失和语言障碍等症状…...

UV - Python 包管理

文章目录 创建 uv 项目已有项目已有uv项目 创建 uv 项目 # 创建项目 uv init m3 # 创建环境 cd m3 uv venv --python 3.11 # 激活环境 source .venv/bin/activate # 添加库 uv add flask 如果创建项目后&#xff0c;给库取别的名字&#xff0c;add 的时候&#xff0c;会…...

设计模式-生产者消费者模型

阻塞队列&#xff1a; 在介绍生产消费者模型之前&#xff0c;我们先认识一下阻塞队列。 阻塞队列是一种支持阻塞操作的队列&#xff0c;常用于生产者消费者模型&#xff0c;它提供了线程安全的队列操作&#xff0c;并且在队列为空或满时&#xff0c;能够阻塞等待&#xff0c;…...

RabbitMQ介绍以及基本使用

文章目录 一、什么是消息队列&#xff1f; 二、消息队列的作用&#xff08;优点&#xff09; 1、解耦 2、流量削峰 3、异步 4、顺序性 三、RabbitMQ基本结构 四、RabbitMQ队列模式 1、简单队列模式 2、工作队列模式 3、发布/订阅模式 4、路由模式 5、主题模式 6、…...

shell解决xml文本中筛选的问题

shell解决xml文本中筛选的问题&#xff0c;将xml文件中多余的配置删除掉&#xff0c;达到符合单一配置的结果。 过于简单就不废话了。 #!/bin/bashconf_file$1 flag0 temp_file"__temp.xml"if [ -f "${temp_file}" ];thenrm "${temp_file}" fi …...

嵌入式硬件篇---OpenMV的硬件流和软件流

文章目录 前言一、硬件流控制&#xff08;Hardware Flow Control&#xff09;1. 基本原理RTSCTS 2. OpenMV中的实现• 硬件要求• 代码配置• 工作流程 二、软件流控制&#xff08;Software Flow Control&#xff09;1. 基本原理XONXOFF 2. OpenMV中的实现• 代码配置• 工作流…...

1.6 学习测试用例(Test)分为几步?

文章目录 前言一、什么是UVM中的测试用例&#xff08;Test&#xff09;&#xff1f;二、如何理解UVM中的测试用例&#xff1f;三、如何使用UVM中的测试用例&#xff1f;四、实操代码示例4.1代码结构4.2 代码实现4.2.1 a. 测试用例类的定义和实现4.2.2 b. 测试环境的构建和配置4…...

PDF2.0 投影注释(Projection annotations)

投影注释是PDF2.0新标准中新增加的注释类型&#xff0c;属于标记注释的子类型&#xff0c;因此&#xff0c;它具有很多其他标记注释的功能。 然而&#xff0c;投影注释仅在特定的运行时环境的上下文中有效&#xff0c;例如已激活的3D模型。 投影注释的注释字典包含了所有注释字…...

【AIGC提示词系统】基于 DeepSeek R1 + ClaudeAI 易经占卜系统

上篇因为是VIP&#xff0c;这篇来一个免费的 提示词在最下方&#xff0c;喜欢的点个关注吧 引言 在人工智能与传统文化交融的今天&#xff0c;如何让AI系统能够传递传统易经文化的智慧&#xff0c;同时保持易经本身的神秘感和权威性&#xff0c;是一个极具挑战性的课题。本文将…...

OpenAI 实战进阶教程 - 第十节 : 结合第三方工具的向量数据库Pinecone

面向读者群体 本节课程主要面向有一定编程基础和数据处理经验的计算机从业人员&#xff0c;如后端开发工程师、数据工程师以及对 AI 应用有浓厚兴趣的技术人员。即使你之前没使用过向量数据库&#xff0c;也可以通过本节的实操内容快速上手&#xff0c;为企业或个人项目构建强…...

深入Linux系列之进程地址空间

深入Linux系列之进程地址空间 1.引入 那么在之前的学习中&#xff0c;我们知道我们创建一个子进程的话&#xff0c;我们可以在代码层面调用fork函数来创建我们的子进程&#xff0c;那么fork函数的返回值根据我们当前所处进程的上下文是返回不同的值&#xff0c;它在父进程中返…...

AWK系统学习指南:从文本处理到数据分析的终极武器 介绍

目录 一、AWK核心设计哲学解析 1.1 记录与字段的原子模型 1.2 模式-动作范式 二、AWK编程语言深度解析 2.1 控制结构 说明&#xff1a; 2.2 关联数组 代码说明&#xff1a; 示例输入和输出&#xff1a; 注意事项&#xff1a; 2.3 内置函数库 三、高级应用技巧 3.1…...

250207-MacOS修改Ollama模型下载及运行的路径

在 macOS 上&#xff0c;Ollama 默认将模型存储在 ~/.ollama/models 目录。如果您希望更改模型的存储路径&#xff0c;可以通过设置环境变量 OLLAMA_MODELS 来实现。具体步骤如下&#xff1a; 选择新的模型存储目录&#xff1a;首先&#xff0c;确定您希望存储模型的目标目录路…...

1、http介绍

一、HTTP 和 HTTPS 简介 HTTP&#xff08;HyperText Transfer Protocol&#xff09; 用途&#xff1a;用于网页数据传输&#xff08;不加密&#xff09;。协议特性&#xff1a;以明文形式传输数据&#xff0c;默认端口 80&#xff0c;无身份验证和完整性保护。典型场景&#xf…...

半导体行业跨网文件交换系统

在当今这个数字化转型的时代&#xff0c;半导体行业作为技术密集型产业&#xff0c;正面临着前所未有的信息安全挑战。随着企业内外网隔离措施的加强&#xff0c;如何实现既安全又高效的跨网文件交换&#xff0c;成为了众多半导体企业的一大难题。 特别是在研发和生产过程中产生…...