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

Java 網頁郵箱提取器:基於正則表達式的爬蟲實戰

     編輯:Java 相關知識

需求背景:從網頁源碼中批量提取 Email

在數據採集、線索挖掘、安全審計等場景中,常需要從目標頁面抓取所有郵箱地址。本文實現一個輕量級爬蟲:URL.openStream() 讀取 HTML → 逐行正則匹配 → 去重輸出。

核心代碼實現

public class EmailExtractor {
    // RFC 5322 簡化版郵箱正則,覆蓋 99% 常見格式
    private static final Pattern EMAIL_PATTERN = Pattern.compile(
        "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}"
    );

    public static void extract(String urlStr) {
        System.out.println("開始抓取:" + urlStr);
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(new URL(urlStr).openStream(), StandardCharsets.UTF_8))) {
            
            String line;
            Set emails = new LinkedHashSet<>(); // 保序去重
            while ((line = reader.readLine()) != null) {
                Matcher matcher = EMAIL_PATTERN.matcher(line);
                while (matcher.find()) {
                    emails.add(matcher.group().toLowerCase());
                }
            }
            
            emails.forEach(System.out::println);
            System.out.printf("共提取 %d 個唯一郵箱%n", emails.size());
            
        } catch (IOException e) {
            System.err.println("抓取失敗:" + e.getMessage());
        }
    }

    public static void main(String[] args) {
        // 示例:百度貼吧頁面(需替換為真實目標)
        extract("https://tieba.baidu.com/f?kw=java&ie=utf-8");
    }
}

關鍵技術點解析

技術點說明
編碼處理显式指定 StandardCharsets.UTF_8,避免中文頁面亂碼
正則優化使用 Pattern.compile 預編譯,避免循環中重複編譯
去重策略LinkedHashSet 兼顧去重與輸出順序
資源管理try-with-resources 自動關閉流,防止句柄洩漏

進階:應對反爬蟲與動態渲染

上述方案僅適用於靜態 HTML。現代網頁常見難點及對策:

  • User-Agent 檢測:設置 URLConnection.setRequestProperty("User-Agent", "Mozilla/5.0...") 模擬瀏覽器;
  • Cookie/登錄態:使用 CookieManager 自動處理會話;
  • JS 動態渲染:需引入 Selenium WebDriver 或 Playwright 驅動真實瀏覽器執行 JS 後再提取;
  • IP 封禁/驗證碼:代理 IP 池 + 驗證碼識別服務(超出純 Java 範疇)。

法律與道德邊界

⚠️ 重要提醒:郵箱屬於個人隱私信息。《網絡安全法》、《個人信息保護法》及《反不正當競爭法》均對非法採集、買賣個人信息有嚴格限制。本代碼僅供技術學習、授權範圍內的數據分析使用,嚴禁用於垃圾郵件發送、詐騙線索收集等違法用途。

總結

Java 實現靜態頁面郵箱提取僅需 30 行核心代碼,關鍵在於正則精準度與編碼處理。面對動態頁面,建議升級為 Headless Browser 方案;生產環境務必遵守法律法規與 robots.txt 協議。

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