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

Java爬虫(Jsoup)详解

文章目录

  • Java爬虫(Jsoup)详解
    • 一、引言
    • 二、Jsoup 快速入门
      • 1、Jsoup 简介
        • 1.1、添加依赖
      • 2、解析 HTML 文档
        • 2.1、解析 HTML 字符串
        • 2.2、从 URL 加载 Document
        • 2.3、解析 body 片断
    • 三、数据抽取
      • 1、使用 DOM 方法遍历文档
        • 3.1、获取元素
      • 2、使用选择器语法查找元素
        • 3.2、CSS 选择器示例
      • 3、抽取属性、文本和 HTML
        • 3.3、属性和内容抽取
    • 四、数据修改
      • 1、设置属性值
        • 4.1、修改属性
      • 2、设置元素的 HTML 内容
        • 4.2、修改 HTML
    • 五、总结

Java爬虫(Jsoup)详解

一、引言

在数据爬取领域,Python 以其强大的库支持而闻名,但 Java 同样不容小觑。Jsoup 就是 Java 中处理 HTML 的佼佼者,它不仅能够解析 HTML,还能提供类似于 jQuery 的 API 来提取和操作 HTML 页面数据。本文将详细介绍 Jsoup 的使用,让你能够快速上手 Java 爬虫。

二、Jsoup 快速入门

1、Jsoup 简介

Jsoup 是一款 Java 的 HTML 解析器,能够直接解析 URL 地址或 HTML 文本内容。它提供了一套非常省力的 API,可以通过 DOM、CSS 选择器以及类似于 jQuery 的操作方法来取出和操作数据。

1.1、添加依赖

在使用 Jsoup 之前,需要在项目中添加 Jsoup 的依赖包。以 Maven 项目为例,可以添加如下依赖:

<!-- 添加 Jsoup 依赖包 -->
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.2</version>
</dependency>

2、解析 HTML 文档

Jsoup 提供了多种方式来解析 HTML 文档。以下是一些基本的解析方法:

2.1、解析 HTML 字符串
String html = "<html><head><title>First parse</title></head><body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
2.2、从 URL 加载 Document
Document doc = Jsoup.connect("http://example.com/").get();
String title = doc.title();
2.3、解析 body 片断
String html = "<div><p>Lorem ipsum.</p></div>";
Document doc = Jsoup.parseBodyFragment(html);
Element body = doc.body();

三、数据抽取

1、使用 DOM 方法遍历文档

一旦将 HTML 解析成 Document 对象,就可以使用类似于 DOM 的方法进行操作。

3.1、获取元素
Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {String linkHref = link.attr("href");String linkText = link.text();
}

2、使用选择器语法查找元素

Jsoup 支持 CSS 选择器语法,可以非常方便地查找和操作元素。

3.2、CSS 选择器示例
Elements links = doc.select("a[href]"); // 带有 href 属性的 a 元素
Elements pngs = doc.select("img[src$=.png]"); // 扩展名为 .png 的图片

3、抽取属性、文本和 HTML

在解析获得 Document 实例对象,并查找到一些元素之后,你可能希望取得这些元素中的数据。

3.3、属性和内容抽取
String text = doc.body().text(); // 取得字符串中的文本
String linkHref = link.attr("href"); // 取得链接地址
String linkText = link.text(); // 取得链接地址中的文本

四、数据修改

1、设置属性值

在解析一个 Document 之后,你可能想修改其中的某些属性值,然后再保存到磁盘或输出到前台页面。

4.1、修改属性
doc.select("div.comments a").attr("rel", "nofollow"); // 为每个 a 元素添加 rel="nofollow"

2、设置元素的 HTML 内容

4.2、修改 HTML
Element div = doc.select("div").first();
div.html("<p>lorem ipsum</p>"); // 清除并设置新的内容
div.prepend("<p>First</p>"); // 在前面添加内容
div.append("<p>Last</p>"); // 在后面添加内容

五、总结

Jsoup 是一个功能强大的 Java HTML 解析库,它不仅能够解析 HTML,还能提供丰富的 API 来提取和操作数据。通过本文的介绍,你应该能够快速上手 Jsoup,并将其应用于你的 Java 爬虫项目中。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • Java 版网页爬虫之 Jsoup 使用详解
  • Jsoup(一)Jsoup详解(官方) - 华仔Coding - 博客园

相关文章:

Java爬虫(Jsoup)详解

文章目录 Java爬虫&#xff08;Jsoup&#xff09;详解一、引言二、Jsoup 快速入门1、Jsoup 简介1.1、添加依赖 2、解析 HTML 文档2.1、解析 HTML 字符串2.2、从 URL 加载 Document2.3、解析 body 片断 三、数据抽取1、使用 DOM 方法遍历文档3.1、获取元素 2、使用选择器语法查找…...

力扣周赛:第424场周赛

&#x1f468;‍&#x1f393;作者简介&#xff1a;爱好技术和算法的研究生 &#x1f30c;上期文章&#xff1a;力扣周赛&#xff1a;第422场周赛 &#x1f4da;订阅专栏&#xff1a;力扣周赛 希望文章对你们有所帮助 第一道题模拟题&#xff0c;第二道题经典拆分数组/线段树都…...

预处理(1)(手绘)

大家好&#xff0c;今天给大家分享一下编译器预处理阶段&#xff0c;那么我们来看看。 上面是一些预处理阶段的知识&#xff0c;那么明天给大家讲讲宏吧。 今天分享就到这里&#xff0c;谢谢大家&#xff01;&#xff01;...

利用OpenAI进行测试需求分析——从电商网站需求到测试用例的生成

在软件测试工程师的日常工作中&#xff0c;需求分析是测试工作中的关键步骤。需求文档决定了测试覆盖的范围和测试策略&#xff0c;而测试用例的编写往往依赖于需求的准确理解。传统手工分析需求耗时长&#xff0c;尤其在面对大量需求和复杂逻辑时容易遗漏细节。本文将以电商网…...

深入探索:Scrapy深度爬取策略与实践

标题&#xff1a;深入探索&#xff1a;Scrapy深度爬取策略与实践 引言 在数据驱动的时代&#xff0c;深度爬取成为了获取丰富信息的重要手段。Scrapy&#xff0c;作为一个强大的Python爬虫框架&#xff0c;提供了多种工具和设置来帮助我们实现深度爬取。本文将详细介绍如何在…...

《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Spring 摘要 这一系列的作业是为 2024 年春季的《生成式 AI》课程设计的&#xff0c;共包含十个作业。每个作业都对应一个具体的主题&#xff0c;例如真假难辨的世界…...

如何编译 Cesium 源码

如何编译 Cesium 源码 Cesium 是一个开源的 JavaScript 库&#xff0c;用于构建 3D 地球和地图应用程序。它提供了一套强大的 API 和工具&#xff0c;使开发者能够创建丰富的地理空间应用。本文将指导您如何从 GitHub 下载 Cesium 源码&#xff0c;并在本地进行编译。 TilesB…...

前端开发设计模式——责任链模式

目录 一、定义和特点 1. 定义 2. 特点 二、实现方式 定义抽象处理者&#xff08;Handler&#xff09;类 创建具体处理者&#xff08;ConcreteHandler&#xff09;类 构建责任链 以下是一个用 JavaScript 实现的示例&#xff1a; 三、应用场景 1. 表单验证 2. 请求处…...

JavaWeb--MySQL

1. MySQL概述 首先来了解一下什么是数据库。 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音…...

Python | Leetcode Python题解之第564题数组嵌套

题目&#xff1a; 题解&#xff1a; class Solution:def arrayNesting(self, nums: List[int]) -> int:ans, n 0, len(nums)for i in range(n):cnt 0while nums[i] < n:num nums[i]nums[i] ni numcnt 1ans max(ans, cnt)return ans...

Spring Boot教程之Spring Boot简介

Spring Boot 简介 接下来一段时间&#xff0c;我会持续发布并完成Spring Boot教程 Spring 被广泛用于创建可扩展的应用程序。对于 Web 应用程序&#xff0c;Spring 提供了 Spring MVC&#xff0c;它是 Spring 的一个广泛使用的模块&#xff0c;用于创建可扩展的 Web 应用程序。…...

Qwen2-VL:发票数据提取、视频聊天和使用 PDF 的多模态 RAG 的实践指南

概述 随着人工智能技术的迅猛发展&#xff0c;多模态模型在各类应用场景中展现出强大的潜力和广泛的适用性。Qwen2-VL 作为最新一代的多模态大模型&#xff0c;融合了视觉与语言处理能力&#xff0c;旨在提升复杂任务的执行效率和准确性。本指南聚焦于 Qwen2-VL 在三个关键领域…...

【安全科普】NUMA防火墙诞生记

一、我为啥姓“NUMA” 随着网络流量和数据包处理需求的指数增长&#xff0c;曾经的我面对“高性能、高吞吐、低延迟”的要求&#xff0c;逐渐变得心有余而力不足。 多CPU技术应运而生&#xff0c;SMP&#xff08;对称多处理&#xff09;和NUMA&#xff08;非一致性内存访问&a…...

机器学习day2-特征工程

四.特征工程 1.概念 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 将任意数据&#xff08;文本或图像等&#xff09;转换为数字特征&#xff0c;对特征进行相关的处理 步骤&#xff1a;1.特征提取&#xff1b;2.无量纲化&#xff08;预处理&#xf…...

Python数据分析NumPy和pandas(三十五、时间序列数据基础)

时间序列数据是许多不同领域的结构化数据的重要形式&#xff0c;例如金融、经济、生态学、神经科学和物理学。在许多时间点重复记录的任何内容都会形成一个时间序列。许多时间序列是固定频率的&#xff0c;也就是说&#xff0c;数据点根据某些规则定期出现&#xff0c;例如每 1…...

Python 小高考篇(6)常见错误及排查

目录 TypeError拼接字符串和数字错误示范正确示范 数字、字符串当成函数错误示范 给函数传入未被定义过的参数错误示范 传入的参数个数不正确错误示范 字符串相乘错误示范正确示范 量取整数的长度错误示范正确示范 格式化字符串时占位符个数不正确错误示范 给复数比较大小错误示…...

k8s上部署redis高可用集群

介绍&#xff1a; Redis Cluster通过分片&#xff08;sharding&#xff09;来实现数据的分布式存储&#xff0c;每个master节点都负责一部分数据槽&#xff08;slot&#xff09;。 当一个master节点出现故障时&#xff0c;Redis Cluster能够自动将故障节点的数据槽转移到其他健…...

C++的类和对象

在C中&#xff0c;类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念。以下是它们的详细介绍&#xff1a; 1. 类&#xff08;Class&#xff09; 定义&#xff1a; 类是用来定义一个新的数据类型&…...

自动驾驶系列—深入解析自动驾驶车联网技术及其应用场景

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

机器学习(1)

一、机器学习 机器学习&#xff08;Machine Learning, ML&#xff09;是人工智能&#xff08;Artificial Intelligence, AI&#xff09;的一个分支&#xff0c;它致力于开发能够从数据中学习并改进性能的算法和模型。机器学习的核心思想是通过数据和经验自动优化算法&#xff…...

深入理解 Redis跳跃表 Skip List 原理|图解查询、插入

1. 简介 跳跃表 ( skip list ) 是一种有序数据结构&#xff0c;通过在每个节点中维持多个指向其他节点的指针&#xff0c;从而达到快速访问节点的目的。 在 Redis 中&#xff0c;跳跃表是有序集合键的底层实现之一&#xff0c;那么这篇文章我们就来讲讲跳跃表的实现原理。 2. …...

Halcon HImage 与 Qt QImage 的相互转换(修订版)

很久以前&#xff0c;我写过一遍文章来介绍 HImage 和 QImage 之间的转换方法。&#xff08;https://blog.csdn.net/liyuanbhu/article/details/91356988&#xff09; 这个代码其实是有些问题的。因为我们知道 QImage 中的图像数据不一定是连续的&#xff0c;尤其是图像的宽度…...

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发&#xff0c;能够通过模板渲染结合数据生成动态页面。在这篇文章中&#xff0c;我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据&#xff0c;并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染&#xff1f;1.1 概…...

CSS:导航栏三角箭头

用CSS实现导航流程图的样式。可根据自己的需求进行修改&#xff0c;代码精略的写了一下。 注&#xff1a;场景一和场景二在分辨率比较低的情况下会有一个1px的缝隙不太优雅&#xff0c;自行处理。有个方法是直接在每个外面包一个DIV&#xff0c;用动态样式设置底色。 场景一、…...

onlyoffice Command service(命令服务)使用示例

一、说明 文档在这里&#xff1a;https://api.onlyoffice.com/docs/docs-api/additional-api/command-service/ 命令服务提供有几个简单的接口封装。也提供了前端和后端同时操作文档的可能。 二、正文 命令服务地址&#xff1a;https://documentserver/coauthoring/Com…...

QSS 设置bug

问题描述&#xff1a; 在QWidget上add 一个QLabel&#xff0c;但是死活不生效 原因&#xff1a; c 主程序如下&#xff1a; QWidget* LOGO new QWidget(logo_wnd);LOGO->setFixedSize(logo_width, 41);LOGO->setObjectName("TittltLogo");QVBoxLayout* tit…...

交换排序——快速排序

交换排序——快速排序 7.7 交换排序——快速排序快速排序概念c语言的库函数qsort快速排序框架quickSort 7.7 交换排序——快速排序 快速排序概念 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff08;下文简称快排&#xff09;&#xff0c;其基本思想为&a…...

nodejs入门(1):nodejs的前后端分离

一、引言 我关注nodejs还是从前几年做了的一个电力大数据展示系统开始的&#xff0c;当然&#xff0c;我肯定是很多年的计算机基础的&#xff0c;万变不离其宗。 现在web网站都流行所谓的前后端结构&#xff0c;不知不觉我也开始受到这个影响&#xff0c;以前都是前端直接操作…...

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因&#xff0c;我的东西最终需要跑在amd64上&#xff0c;但是因为mac的架构师arm64&#xff0c;所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构&#xff1a; docker inspect 8135f475e221 | grep Arc…...

gorm框架

连接 需要下载mysql的驱动 go get gorm.io/driver/mysql go get gorm.io/gorm 约定 主键&#xff1a;GORM 使用一个名为ID 的字段作为每个模型的默认主键。表名&#xff1a;默认情况下&#xff0c;GORM 将结构体名称转换为 snake_case 并为表名加上复数形式。 例如&#xf…...

网站建设和使用情况/写软文能赚钱吗

目录一. CSS 之 px, em, rem二. CSS 盒模型三. Flex 布局四. CSS动画一. CSS 之 px, em, rem 背景简介 PX 为单位 *px 比较精准和固定。 只要页面某个元素设置了px字体大小&#xff0c;其子元素/子孙元素未设置字体大小或者设置字体大小对应的CSS优先级没有父元素高&#xff0c…...

区块链技术做网站/谷歌seo软件

在Linux /etc/passwd文件中每个用户都有一个对应的记录行&#xff0c;它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。 它的内容类似下面的例子&#xff1a; 从上面的例子我们可以看到&#xff0c;/etc/passwd中一行记录对应着…...

wordpress主题租房/seo全网优化推广

nodejs 框架安装生成app下载nodejs解压到opt目录$ cd /usr/local/bin$ sudo ln -s /opt/node-v5.1.0-linux-x64/bin/node$ sudo ln -s /opt ...GitHub入门之一&#xff1a;使用github下载项目git作为目前比较流行的版本控制系统,被各个互联网公司广泛使用着.目前国外的网站有Gi…...

怎么做网站劫持/免费建立个人网站官网

组合总和 题目描述&#xff1a;给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是…...

网站开发投标书/推广渠道平台

spring的整体架构 架构图&#xff1a; 这些模块可以分为以下几个部分&#xff1a; core container core container 包括 core beans EL context core 和 beans 模块是框架的基础部分&#xff0c;提供 IOC 控制反转 和依赖注入的特性。 core模块中包含spring框架的基本核心类&am…...

中国建设银官方网站/推广普通话手抄报图片大全

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85932155 1. 课程设计目的 《软件设计基础-C》课程设计是这门课程的实践性教学环节之一&#xff0c;本次设计结合实际应用的要求&#xff0c;使课程设计既覆盖C的知识点&#xff0c;又接近工程实际需…...