網頁爬蟲的本質其實很直觀:程式模擬瀏覽器行為,打開目標網頁的原始碼,透過特定規則(如正則表達式)匹配並提取所需資訊,最後將結果儲存。這篇文章將帶你從零開始理解 Java 爬蟲的運作機制,並提供可直接執行的完整程式碼範例。
首先使用 java.net.URL 類別建立目標網址連線:
URL url = new URL("https://www.cnblogs.com/Renyi-Fan/p/6896901.html");
透過 BufferedReader 配合 InputStreamReader 逐行讀取網頁原始碼:
BufferedReader bufr = new BufferedReader(new InputStreamReader(url.openStream()));
以電子郵件提取為例,使用正則表達式定義匹配模式:
String mail_regex = "\\w+@\\w+(\\.\\w+)+";
使用 ArrayList 收集所有符合規則的資料:
List<String> list = new ArrayList<String>();
以下是整合上述步驟的完整爬蟲類別,包含從網路抓取與從本地檔案讀取兩種模式:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Spider {
public static void main(String[] args) throws IOException {
List<String> list = getMailsByWeb();
for(String mail : list){
System.out.println(mail);
}
}
public static List<String> getMailsByWeb() throws IOException{
URL url = new URL("https://www.cnblogs.com/Renyi-Fan/p/6896901.html");
BufferedReader bufr = new BufferedReader(new InputStreamReader(url.openStream()));
String mail_regex = "\\w+@\\w+(\\.\\w+)+";
List<String> list = new ArrayList<String>();
Pattern p = Pattern.compile(mail_regex);
String line = null;
while((line = bufr.readLine()) != null){
Matcher m = p.matcher(line);
while(m.find()){
list.add(m.group());
}
}
return list;
}
public static List<String> getMails() throws IOException{
BufferedReader bufr = new BufferedReader(new FileReader("c:\\mail.html"));
String mail_regex = "\\w+@\\w+(\\.\\w+)+";
List<String> list = new ArrayList<String>();
Pattern p = Pattern.compile(mail_regex);
String line = null;
while((line = bufr.readLine()) != null){
Matcher m = p.matcher(line);
while(m.find()){
list.add(m.group());
}
}
return list;
}
}
程式執行後將輸出提取到的電子郵件地址:
abc1@sina.com.cn 1@1.1
Pattern.compile() 編譯規則,matcher() 建立匹配器,find() 尋找下一個匹配項,group() 取得匹配內容BufferedReader.readLine() 逐行讀取,適合處理大型網頁避免記憶體溢位IOException,確保程式健壯性這個範例展示了爬蟲最基礎的雛形,實際專案中通常會搭配 Jsoup、HttpClient 等框架處理更複雜的場景,如動態網頁渲染、反爬蟲機制應對、分散式爬取等進階需求。