Android Studio中Jsoup爬取慢加载网页失败求助
解决Jsoup爬取目标网站无结果的问题
可能的原因及对应解决方案
1. 目标网站拦截非浏览器请求(反爬)
多数网站会校验请求的User-Agent字段,拒绝非浏览器发起的请求。当前Jsoup请求未设置该字段,大概率被网站拦截。修改代码添加模拟浏览器的请求头:
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 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") .timeout(60000) .get();
2. 错误使用请求方式
观察目标网站的翻译逻辑,实际可能是通过POST提交表单数据,而非直接访问带参数的GET链接。尝试改用POST请求:
Document doc = Jsoup.connect("https://translatekreol.mu/translation.php") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") .data("source", "enn bon garson") .data("lang", "kreol") .data("boutton", "Translate") .timeout(60000) .post();
3. Android主线程执行网络请求导致程序停滞
Android禁止在主线程执行网络操作,否则会引发ANR(应用无响应),表现为程序停滞。必须将Jsoup请求放在子线程中执行,以下是两种实现方式:
Java 线程池/普通线程示例
new Thread(new Runnable() { @Override public void run() { try { Document doc = Jsoup.connect("https://translatekreol.mu/translation.php") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") .data("source", "enn bon garson") .data("lang", "kreol") .data("boutton", "Translate") .timeout(60000) .post(); final String bodyContent = doc.body().html(); // 切换到主线程处理结果(如更新UI) runOnUiThread(new Runnable() { @Override public void run() { // 后续业务逻辑 } }); } catch (IOException e) { e.printStackTrace(); } } }).start();
Kotlin 协程示例
CoroutineScope(Dispatchers.IO).launch { try { val doc = Jsoup.connect("https://translatekreol.mu/translation.php") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") .data("source", "enn bon garson") .data("lang", "kreol") .data("boutton", "Translate") .timeout(60000) .post() // 切换回主线程处理结果 withContext(Dispatchers.Main) { val bodyContent = doc.body().html() // 后续业务逻辑 } } catch (e: IOException) { e.printStackTrace() } }
4. 额外反爬机制(如Cookie校验)
如果上述方法仍无效,可能网站需要携带特定Cookie才能访问。先在浏览器中打开目标链接,复制请求头中的Cookie字段,添加到Jsoup请求:
Document doc = Jsoup.connect("https://translatekreol.mu/translation.php") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") .cookie("your_cookie_key", "your_cookie_value") // 替换为浏览器中获取的Cookie内容 .data("source", "enn bon garson") .data("lang", "kreol") .data("boutton", "Translate") .timeout(60000) .post();
内容的提问来源于stack exchange,提问作者my pc
相关产品推荐
相关产品推荐

