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

Java HttpClient 分頁抓取圖片:解析翻頁鏈接循環下載

     編輯:程式設計疑難解答

目標頁面分析

URL:https://i.wap.58.com/wapimg/?page=1&infoid=25150533913132&cate=zufang&citylistname=bj
頁面包含「上一張圖」「下一張圖」鏈接,`page` 參數遞增/遞減。

抓取策略

  1. GET 頁面 HTML。
  2. 解析 `` 標籤獲取圖片真實 URL(或直接從 `src` 屬性)。
  3. 下載圖片二進制保存。
  4. 查找「下一張圖」鏈接(`a` 標簽文本包含「下一張」或 `href` 含 `page=N+1`)。
  5. 若存在則遞歸/循環抓取下一頁,否則結束。

核心代碼 (HttpClient 4.5 + Jsoup)

CloseableHttpClient client = HttpClients.createDefault();
String baseUrl = "https://i.wap.58.com/wapimg/?page=1&infoid=25150533913132&cate=zufang&citylistname=bj";
String url = baseUrl;

while (url != null) {
    HttpGet get = new HttpGet(url);
    get.setHeader("User-Agent", "Mozilla/5.0");
    try (CloseableHttpResponse resp = client.execute(get)) {
        String html = EntityUtils.toString(resp.getEntity(), "utf-8");
        Document doc = Jsoup.parse(html);
        
        // 1. 下載圖片
        Element img = doc.select("img[src]").first();
        if (img != null) {
            String imgUrl = img.attr("abs:src");
            downloadImage(client, imgUrl); // 另寫方法保存文件
        }
        
        // 2. 找下一頁
        Element next = doc.select("a:contains(下一張)").first();
        url = (next != null) ? next.absUrl("href") : null;
        
        Thread.sleep(500); // 禮貌延遲
    }
}

關鍵點

  • 設置 `User-Agent` 防反爬。
  • 用 Jsoup 選擇器定位「下一張」鏈接,比正則更健壯。
  • 圖片下載用 `HttpGet` 直接寫入 `FileOutputStream`。
  • 異常處理、重試、去重、限流均需加入生產代碼。

總結

分頁抓取核心是「解析列表頁 → 提取詳情/資源鏈接 → 尋找下一頁鏈接 → 循環」。HttpClient + Jsoup 是 Java 端經典組合。

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