核心類體系總結
| 類/接口 | 包 | 核心作用 | 關鍵方法 |
| URL | java.net | 統一資源定位符 | openConnection()、getProtocol()、getHost() |
| URLConnection | java.net | 網絡連接抽象 | connect()、getInputStream()、setRequestProperty() |
| HttpURLConnection | java.net | HTTP 專用連接 | setRequestMethod()、getResponseCode()、getOutputStream() |
| BufferedReader | java.io | 緩沖字符讀取 | readLine()、read(char[]) |
| InputStreamReader | java.io | 字節流轉字符流 | 構造器指定編碼:new InputStreamReader(is, "UTF-8") |
| Pattern | java.util.regex | 正則編譯模式 | compile(regex)、matcher(input) |
| Matcher | java.util.regex | 正則匹配器 | find()、group()、group(int)、start()、end() |
典型爬蟲代碼模板
public class SimpleCrawler {
public static void main(String[] args) throws Exception {
// 1. 建立連接
URL url = new URL("https://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent", "Mozilla/5.0");
conn.setConnectTimeout(5000);
conn.setReadTimeout(10000);
// 2. 讀取響應
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
StringBuilder html = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
html.append(line).append("\n");
}
// 3. 正則提取
String regex = "<title>(.*?)</title>";
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(html.toString());
if (matcher.find()) {
System.out.println("頁面標題: " + matcher.group(1));
}
}
}
}
進階提示
- 編碼處理:優先從
Content-Type Header 獲取 charset,失敗則嘗試 UTF-8/GBK 自動檢測
- 異常處理:區分連接超時、讀取超時、HTTP 錯誤碼(4xx/5xx)、SSL 證書異常
- 合規性:遵守
robots.txt、設置合理爬取間隔、識別 User-Agent
- 生產級框架:推薦使用 HttpClient、OkHttp、Jsoup、WebMagic 等成熟庫替代原生 API