JSOUP 在 Android 中进行网页抓取时的超时配置详解

浅磊同学_8272

浅磊同学_8272

2026-03-24

833人浏览

原创

JSOUP 在 Android 中进行网页抓取时的超时配置详解

本文讲解如何在 Android Studio 中使用 JSOUP 抓取响应缓慢的网站(如 translatekreol.mu),重点解决因服务器响应延迟导致 Jsoup.connect().get() 阻塞或失败的问题,核心方案是合理设置连接与读取超时,尤其推荐使用 timeout(0) 启用无限等待。

本文讲解如何在 android studio 中使用 jsoup 抓取响应缓慢的网站(如 translatekreol.mu),重点解决因服务器响应延迟导致 `jsoup.connect().get()` 阻塞或失败的问题,核心方案是合理设置连接与读取超时,尤其推荐使用 `timeout(0)` 启用无限等待。

在 Android 开发中,使用 JSOUP 进行网页抓取(Web Scraping)是一种轻量且高效的方式。但当目标网站响应极慢(例如需 25 秒以上才返回 HTML)、存在服务端延迟、或依赖动态渲染逻辑时,JSOUP 默认的超时机制(通常为 3 秒)极易触发 java.net.SocketTimeoutException 或静默失败,导致 Document doc 为空或请求中断——正如你在抓取 https://translatekreol.mu/translation.php?... 时所遇到的问题。

关键在于:JSOUP 的 .timeout(int millis) 方法同时控制连接超时(connection timeout)和读取超时(read timeout)。即使你设置了 timeout(60000)(60 秒),若服务器在建立 TCP 连接后迟迟不发送响应体(如后端翻译逻辑耗时过长),JSOUP 仍可能在读取阶段提前终止。

✅ 正确做法是:显式分离连接与读取超时,并对高延迟站点启用无限读取等待:

try {
    // 推荐:分别设置连接超时(合理值)与读取超时(0 = 无限等待)
    Document doc = Jsoup.connect("https://translatekreol.mu/translation.php?&source=enn%20bon%20garson&lang=kreol&boutton=Translate")
            .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36") // 模拟浏览器 UA
            .timeout(10_000) // 连接超时设为 10 秒(足够建立连接)
            .maxBodySize(0)   // 禁用响应体大小限制(避免因内容大被截断)
            .get();

    // 提取 body 内容(该站点结果直接在  中)
    String translation = doc.body().text();
    Log.d("JSOUP", "Result: " + translation);

} catch (IOException e) {
    Log.e("JSOUP", "Fetch failed", e);
}

⚠️ 重要注意事项:

  • timeout(0) 的含义:它表示「无限超时」,即 JSOUP 将持续等待直到数据到达或网络异常中断。这适用于你已知目标服务必然响应但极慢的场景(如该克里奥尔语翻译站),但不可滥用在不可控公网环境,否则可能导致主线程卡死(Android 中务必在后台线程执行!)。
  • 必须运行在非 UI 线程:JSOUP 是阻塞式 HTTP 客户端,绝对禁止在主线程调用 .get() 或 .post(),否则触发 NetworkOnMainThreadException。请使用 Thread、AsyncTask(已弃用,仅作兼容参考)、Executors 或现代方案如 Kotlin Coroutines + withContext(Dispatchers.IO)。
  • 添加 User-Agent:部分网站(包括该翻译站)会拒绝无 UA 的请求,返回空页或 403。设置合理 UA 可显著提升成功率。
  • 检查 HTTPS 证书与 TLS 兼容性:老旧 Android 版本(API
  • 备用方案考虑:若页面实际依赖 JavaScript 渲染(尽管本例是服务端 PHP 输出),JSOUP 无法执行 JS,此时应改用 WebView + JavaScriptInterface 或专用无头浏览器(如 Selenium Grid + Appium 不适用移动端;更现实的是服务端代理解析)。

总结:面对高延迟 Web API,不要盲目增大单一 timeout() 值;而是采用「有限连接超时 + 无限读取等待」策略,并严格保障网络操作在后台线程执行。配合 UA 设置与异常处理,即可稳定抓取类似 translatekreol.mu 这类响应缓慢但结构简单的服务端渲染页面。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Kotlin协程编程与Spring Boot集成实践
Kotlin协程编程与Spring Boot集成实践

本专题围绕 Kotlin 协程机制展开,深入讲解挂起函数、协程作用域、结构化并发与异常处理机制,并结合 Spring Boot 展示协程在后端开发中的实际应用。内容涵盖异步接口设计、数据库调用优化、线程资源管理以及性能调优策略,帮助开发者构建更加简洁高效的 Kotlin 后端服务架构。

2026.02.12

351

18

Java Kotlin协程与异步编程实战
Java Kotlin协程与异步编程实战

本专题围绕 Kotlin 协程与异步编程展开,讲解挂起函数、协程作用域、异步任务调度及并发控制方法。通过实际项目案例,帮助开发者提升后端服务性能,实现高效异步任务处理与稳定性保障。

2026.04.13

159

16

Kotlin Android开发教程大全
Kotlin Android开发教程大全

系统讲解 Google 官方推荐的 Android 开发首选语言 Kotlin 的核心知识与工程实践,涵盖 Kotlin 简洁语法(空安全/数据类/扩展函数/解构声明/作用域函数)与 Java 互操作、集合操作与函数式编程、协程(Coroutines)异步编程(suspend/launch/async/Flow)、Jetpack Compose 声明式 UI 开发(状态管理/组合函数/导航/动画)、MVVM / MVI 架构设计与 Vi

2026.06.03

248

19

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.02

5879

3

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.29

2905

6

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

2025.08.29

3688

10

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.29

2585

10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

2023.08.10

3918

6

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

2025.12.01

543

16

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习