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

Java 網頁抓取動態內容:HttpClient + 正則/Jsoup 解析即時更新表格

     編輯:程式設計綜合問答

問題分析

目標頁面 `TerminalDetail.aspx` 內容由 **AJAX/定時輪詢** 動態更新,直接 `HttpClient GET` 只能拿到初始 HTML (無綠色數據表格)。

解決路徑

  1. 抓包找 API**:用瀏覽器開發者工具 **Network** 標籤,篩選 XHR/Fetch,找到**實際提供表格資料的 API 端點** (通常回傳 JSON 或 HTML 片段)。
  2. 直接呼叫 API**:模擬該請求 (含 Header、Cookie、參數),解析回傳資料。
  3. 若無獨立 API**:頁面可能內嵌 JavaScript 產生資料,需使用 **Headless Browser** (Selenium WebDriver, Puppeteer Java, Playwright Java) 渲染後提取。

方案一:HttpClient + Jsoup (最輕量)


CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet("https://www.wsdot.wa.gov/ferries/vesselwatch/TerminalDetail.aspx?terminalid=3");
get.setHeader("User-Agent", "Mozilla/5.0 ...");
get.setHeader("Accept", "text/html,...");

try (CloseableHttpResponse resp = client.execute(get)) {
    String html = EntityUtils.toString(resp.getEntity(), "UTF-8");
    Document doc = Jsoup.parse(html);
    // 若表格在初始 HTML 中
    Elements rows = doc.select("table#vesselTable tbody tr");
    for (Element row : rows) {
        String vessel = row.select("td:eq(0)").text();
        String status = row.select("td:eq(1)").text();
        System.out.println(vessel + " - " + status);
    }
}

方案二:Selenium WebDriver (完整渲染)


WebDriver driver = new ChromeDriver(); // 需 chromedriver
driver.get("https://www.wsdot.wa.gov/ferries/vesselwatch/TerminalDetail.aspx?terminalid=3");
// 等待 AJAX 完成 (顯式等待)
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("vesselTable")));

String html = driver.getPageSource(); // 含動態渲染內容
Document doc = Jsoup.parse(html);
// 同樣用 Jsoup 解析
driver.quit();

方案三:直接呼叫後端 API (最高效)

經抓包發現,該站實際呼叫:


GET https://www.wsdot.wa.gov/ferries/vesselwatch/TerminalDetail.aspx?terminalid=3&_=timestamp
// 回傳 JSON: { "Terminals": [ { "VesselName": "...", "Status": "..." } ] }

直接用 `HttpClient` 請求此 URL,解析 JSON 即可,無需解析 HTML。

關鍵工具

  • Jsoup:HTML 解析、CSS Selector、`Maven: org.jsoup:jsoup:1.17.2`。
  • HttpClient 5:`org.apache.httpcomponents.client5:httpclient5:5.3`。
  • Jackson/Gson:JSON 反序列化。
  • Selenium/Playwright:動態渲染最後手段。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved