首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實作網路爬蟲:可復用 Spider 類別設計與死連結檢測

     編輯:Java 相關知識

網路爬蟲能自動遍歷網站鏈結繪製頁面地圖。Java 內建 HTTP 協定支援與 HTML 解析器,是開發爬蟲的理想語言。本文展示可復用 Spider 類別架構、回呼介面設計,並以死連結檢測為例說明應用方式。

架構設計:介面隔離與事件驅動

// 回呼介面:爬蟲透過此介面將事件通知應用層
public interface ISpiderReportable {
    boolean spiderFoundURL(URL base, URL url);   // 發現新 URL,返回 true 表示繼續追蹤
    void spiderURLError(URL url);                // URL 存取錯誤
    void spiderFoundEMail(String email);         // 發現電子郵件
}

核心 Spider 類別

維護三組 URL 集合:

  • workloadWaiting:待處理佇列
  • workloadProcessed:已處理集合
  • workloadError:錯誤集合

主迴圈

public void begin() {
    cancel = false;
    while (!workloadWaiting.isEmpty() && !cancel) {
        URL[] urls = workloadWaiting.toArray(new URL[0]);
        for (URL url : urls) {
            if (cancel) break;
            processURL(url);
        }
    }
}

HTML 解析與鏈結提取

利用 Swing 內建 HTMLEditorKit.Parser,因 getParser() 為 protected,需子類別暴露:


public class HTMLParse extends HTMLEditorKit {
    public HTMLEditorKit.Parser getParser() { return super.getParser(); }
}

解析回呼類別 Parser 繼承 HTMLEditorKit.ParserCallback,重寫 handleSimpleTag、handleStartTag 提取 href/src 屬性,將相對 URL 轉為絕對 URL 後加入待處理佇列。

應用範例:死連結檢測器


public class CheckLinks extends JFrame implements Runnable, ISpiderReportable {
    // UI 元件:URL 輸入框、開始/取消按鈕、進度標籤、統計標籤、錯誤滾動文字區
    // 背景執行緒執行爬蟲,SwingUtilities.invokeLater 更新 UI

    @Override
    public boolean spiderFoundURL(URL base, URL url) {
        updateStatus(url.toString());
        if (!checkLink(url)) {  // 開啟連線驗證
            logError(url + " (on page " + base + ")");
            badLinksCount++;
            return false;  // 不追蹤死連結
        }
        goodLinksCount++;
        return url.getHost().equalsIgnoreCase(base.getHost());  // 同域才繼續爬
    }

    protected boolean checkLink(URL url) {
        try { url.openConnection().connect(); return true; }
        catch (IOException e) { return false; }
    }
    // ... spiderURLError、spiderFoundEMail 空實作
}

關鍵類別清單

檔案職責
ISpiderReportable.java事件回呼介面
Spider.java核心爬蟲邏輯:佇列管理、HTTP 存取、HTML 解析調度
HTMLParse.java暴露受保護的 Parser 取得方法
CheckLinks.javaGUI 應用:實作介面、啟動背景執行緒、死連結檢測邏輯

擴展建議

  • 加入 robots.txt 遵從檢查
  • 支援 Cookie/Session 維持登入狀態
  • 使用資料庫持久化已爬 URL,支援斷點續爬
  • 引入執行緒池並行抓取,提升效能
  • 整合 Jsoup 等更強健的 HTML 解析庫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved