本文演示如何使用 Java 網絡 IO 與正則表達式從指定網頁(如豆瓣小組話題頁)批量提取郵箱地址,適合爬蟲入門練習與數據採集需求。
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
爬蟲開發請遵守 robots.txt 協議、網站服務條款及相關法律法規,僅用於學習研究,切勿用於商業垃圾郵件發送等非法用途。