如何使用 Jsoup 在 Java 中高效解析维基网页表格并映射为自定义对象

霞舞

霞舞

2026-06-03

519人浏览

原创

如何使用 Jsoup 在 Java 中高效解析维基网页表格并映射为自定义对象

本文介绍如何利用 jsoup 库从 binding of isaac 维基页面(https://bindingofisaacrebirth.fandom.com/wiki/items)中自动提取物品表格数据,并结构化为 java 对象,适用于 android 项目中的列表展示。

本文介绍如何利用 jsoup 库从 binding of isaac 维基页面(https://bindingofisaacrebirth.fandom.com/wiki/items)中自动提取物品表格数据,并结构化为 java 对象,适用于 android 项目中的列表展示。

在 Android 开发中,若需将第三方网页中的结构化数据(如游戏道具表)动态加载为本地对象列表,手动复制粘贴显然不可持续。Jsoup 是一个功能强大且轻量的 Java HTML 解析库,特别适合处理真实世界中不规范但语义清晰的网页内容——例如 Fandom 维基站点。

以下是一个完整、可运行的解析方案,目标是将维基页中“Collectible Items”表格的六项字段(Name、Id、Icon、Quote、Description、Quality)准确抽取,并封装为 Item 实体类:

✅ 步骤一:添加依赖(Gradle)

在 app/build.gradle 中引入 Jsoup(注意 Android 9+ 默认禁用明文 HTTP,而该站点使用 HTTPS,无需额外配置):

Java JDK 25
Java JDK 25

Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。

下载
implementation 'org.jsoup:jsoup:1.18.1'

⚠️ 注意:Android 中网络请求必须在子线程执行(如 AsyncTask、Coroutine 或 ExecutorService),禁止在主线程调用 Jsoup.connect().get(),否则抛出 NetworkOnMainThreadException。

✅ 步骤二:定义数据模型类

public class Item {
    private String name;
    private String id;              // 原始为字符串格式如 "5.100.130",可按需转为 int 或保留
    private String iconUrl;
    private String quote;
    private String description;
    private int quality;

    // 构造函数、getter/setter 略(建议使用 IDE 自动生成)
}

✅ 步骤三:核心解析逻辑(含健壮性增强)

原始示例仅提取前三列,但实际表格包含 Quote、Description 和 Quality 字段。经分析目标页面 HTML 结构,主表格中每行 .row-collectible 包含 6 个 单元格,对应字段顺序如下(以最新快照为准):

列索引 字段 提取说明
0 Name cell.get(0).text()
1 Id cell.get(1).text()
2 Icon @@##@@ 的 data-src 属性(注意:部分图标可能无 data-src,需 fallback 到 src)
3 Quote cell.get(3).text()(常含换行与多余空格,建议 trim().replaceAll("\s+", " "))
4 Description cell.get(4).text()(同上,需清洗)
5 Quality cell.get(5).text() → Integer.parseInt(...),需 try-catch

优化后的解析代码(含异常防护与日志):

public List<item> parseItemsFromWiki() {
    List<item> items = new ArrayList();
    String url = "https://bindingofisaacrebirth.fandom.com/wiki/Items";

    try {
        Document doc = Jsoup.connect(url)
                .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
                .timeout(10000)
                .get();

        Element table = doc.selectFirst("table"); // 或更精准:table[role=grid]
        if (table == null) throw new IllegalStateException("Table not found");

        Elements rows = table.select("tr.row-collectible");
        Log.d("Jsoup", "Found " + rows.size() + " collectible rows");

        for (Element row : rows) {
            Elements cells = row.getElementsByTag("td");
            if (cells.size() <h3>⚠️ 关键注意事项</h3>
<ul>
<li>
<strong>反爬策略</strong>:Fandom 可能对高频请求返回 403,务必设置 userAgent 并合理控制请求频率(生产环境建议加缓存或使用官方 API)。</li>
<li>
<strong>HTML 动态性</strong>:维基页面结构可能随编辑更新,建议定期验证选择器(如 .row-collectible 是否仍存在,或改用 table tbody tr + 内容特征判断)。</li>
<li>
<strong>图片加载</strong>:data-src 是懒加载属性,直接获取即可;Android 中推荐用 Glide/Picasso 加载 iconUrl。</li>
<li>
<strong>线程安全</strong>:该方法应在后台线程调用,解析完成后通过 Handler、LiveData 或 Coroutine 切回主线程更新 UI。</li>
</ul>
<h3>✅ 后续集成(Android 示例)</h3>
<pre class="brush:php;toolbar:false;">// 在 ViewModel 或 Repository 中调用
new Thread(() -> {
    List<item> items = parseItemsFromWiki();
    // 更新 LiveData 或通知 Adapter
    itemLiveData.postValue(items);
}).start();</item>

通过以上方案,你不仅能稳定获取全部 170+ 道具数据,还构建了可维护、可扩展的数据管道——为后续搜索、筛选、离线缓存等功能打下坚实基础。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

3741

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

2753

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

2777

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

635

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

600

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

705

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1288

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

18844

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

646

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

Java 26官方文档
Java 26官方文档

共0课时 | 0人学习