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

Java 正則表達式爬取網頁郵箱地址實戰教程

     編輯:Java 相關知識

項目背景

本文演示如何使用 Java 網絡 IO 與正則表達式從指定網頁(如豆瓣小組話題頁)批量提取郵箱地址,適合爬蟲入門練習與數據採集需求。

核心實現步驟

  1. 構建 URL 對象綁定目標網址
  2. 通過 openConnection() 獲取 HTTP 連接
  3. 獲取輸入流讀取網頁源碼
  4. 逐行匹配正則表達式提取郵箱

完整代碼實現

package cn.bdqn;
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 EmailCrawler {
    public static void main(String[] args) throws IOException {
        // 1. 目標 URL(示例:豆瓣小組話題頁)
        URL url = new URL("https://www.douban.com/group/topic/8845032/");
        
        // 2. 打開連接並設置超時
        URLConnection conn = url.openConnection();
        conn.setConnectTimeout(10000); // 10 秒
        
        // 3. 讀取網頁內容
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
            
            // 4. 郵箱正則表達式
            String regex = "[a-zA-Z0-9_-]+@\\w+\\.[a-z]+(\\.[a-z]+)?";
            Pattern pattern = Pattern.compile(regex);
            String line;
            
            // 5. 逐行匹配輸出
            while ((line = reader.readLine()) != null) {
                Matcher matcher = pattern.matcher(line);
                while (matcher.find()) {
                    System.out.println(matcher.group());
                }
            }
        }
    }
}

正則表達式深度解析

[a-zA-Z0-9_-]+   // 用戶名:字母、數字、下劃線、連字符,至少 1 位
@                // 必須包含 @ 符號
\\w+             // 域名主體:字母數字下劃線
\\.              // 轉義點號(匹配實際的 .)
[a-z]+           // 頂級域名:如 com、cn、net
(\\.[a-z]+)?     // 可選的二級域名:如 .com.cn

進階優化建議

  • 編碼處理:實際項目中需從 Content-Type 或頁面 meta 標籤檢測編碼
  • 反爬應對:添加 User-Agent、Cookie、代理 IP、請求間隔
  • 去重存儲:使用 Set 集合去重,持久化到數據庫或文件
  • 多線程:針對多頁面採集可引入線程池併發處理

法律合規提醒

爬蟲開發請遵守 robots.txt 協議、網站服務條款及相關法律法規,僅用於學習研究,切勿用於商業垃圾郵件發送等非法用途。

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