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

Java 爬蟲實戰:基於正則表達式抓取網頁郵箱地址

     編輯:Java 相關知識

核心思路

  1. 使用 java.net.URL 打開目標頁面連接。
  2. 獲取 InputStream,包裝為 BufferedReader 逐行讀取。
  3. 預編譯郵箱正則 Pattern,逐行 Matcher.find() 提取匹配。

完整代碼實現

package com.example.crawler;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailExtractor {
    // 簡易郵箱正則:支援常見格式,不保證 100% RFC 合規
    private static final String EMAIL_REGEX = "[a-zA-Z0-9_-]+@[a-zA-Z0-9]+(\\.[a-zA-Z0-9]+)+";
    private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);

    public static void main(String[] args) {
        String targetUrl = "https://www.example.com/contact"; // 替換為目標頁面
        extractEmails(targetUrl).forEach(System.out::println);
    }

    public static java.util.List<String> extractEmails(String urlStr) {
        java.util.List<String> emails = new java.util.ArrayList<>();
        try {
            URL url = new URL(urlStr);
            URLConnection conn = url.openConnection();
            conn.setConnectTimeout(10_000); // 10 秒連接超時
            conn.setReadTimeout(10_000);    // 10 秒讀取超時
            // 模擬瀏覽器 User-Agent 避免 403
            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");

            try (BufferedReader reader = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), "UTF-8"))) {

                String line;
                while ((line = reader.readLine()) != null) {
                    Matcher matcher = EMAIL_PATTERN.matcher(line);
                    while (matcher.find()) {
                        emails.add(matcher.group());
                    }
                }
            }
        } catch (IOException e) {
            System.err.println("抓取失敗:" + e.getMessage());
        }
        return emails;
    }
}

正則表達式進階說明

  • [a-zA-Z0-9_-]+:本地部(@ 前)允許字母、數字、下劃線、連字符、點(此處簡化未含點)。
  • @:字面 @。
  • [a-zA-Z0-9]+(\\.[a-zA-Z0-9]+)+:域名部分,至少一個點分隔的標籤。

局限:無法處理 HTML 實體編碼(@)、JS 動態生成、圖片/Canvas 嵌入的郵箱。生產級爬蟲建議使用 Jsoup 解析 DOM + 正則,或 HttpClient + 完整 HTML 解析器。

法律與道德提醒

  • 請遵守目標站點 robots.txt 與服務條款。
  • 僅抓取公開信息,切勿用於垃圾郵件、騷擾或非法用途。
  • 高頻請求請加入延時、IP 池、驗證碼識別等反反爬策略。

結語

幾十行代碼即可實現基礎郵箱抓取,核心在於 URLConnection 流式讀取與 Pattern/Matcher 正則提取。實際專案中請根據頁面結構選擇更健壯的解析方案。

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