首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 使用 Jsoup 解析 HTML 僅獲取部分原始碼的原因與解決

     編輯:程式設計綜合問答

問題

Java 專案中 Jsoup 可解析完整 HTML,但在 Android 專案中僅能解析部分,選擇器回傳空指標。

原因分析

  1. 網路權限缺失:AndroidManifest.xml 未加 <uses-permission android:name="android.permission.INTERNET" />。
  2. 主執行緒網路請求:Android 4.0+ 禁止主執行緒網路 IO,需放入 Thread、AsyncTask、RxJava 或 Coroutine。
  3. 目標網站反爬/動態渲染:網站回傳的 HTML 為空殼,內容由 JavaScript (React/Vue) 動態渲染,Jsoup 無法執行 JS。
    解決:改用 WebView + evaluateJavascript 或 Selenium/Playwright (需雲端) 或尋找網站的 API 介面直接呼叫。
  4. User-Agent 被擋:預設 UA 為 Dalvik/...,需偽裝為瀏覽器 UA。
  5. 編碼問題:回應編碼非 UTF-8,需指定 Jsoup.connect(url).header("Accept-Charset", "GBK,UTF-8").get()。

最佳實踐

// Kotlin Coroutine 範例
lifecycleScope.launch(Dispatchers.IO) {
    try {
        val doc = Jsoup.connect(url)
            .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0")
            .timeout(10000)
            .get()
        // 解析...
        withContext(Dispatchers.Main) { updateUI(doc) }
    } catch (e: Exception) { Log.e("Jsoup", "Parse failed", e) }
}

總結

Android 環境下網路請求必須異步、加權限、偽裝 UA;若目站為 SPA 動態渲染,Jsoup 根本無法獲取完整 DOM,需轉向 API 或無頭瀏覽器方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved