需大量蒐集特定類型網址(如軟體發布頁、論壇、郵件清單)時,人工不可行。利用搜尋引擎的 關鍵字 與 inurl: 語法,搭配 HTTP 模擬請求與 HTML 解析,可自動化完成。
inurl:publish.asp)。軟體發布 版本 inurl:publish.asp。pn、Google start,每頁 20 筆,迴圈抓取。String baseUrl = "https://www.baidu.com/s?lm=0&si=&rn=20&IE=gb2312&ct=0" +
"&wd=%E8%BB%9F%E4%BB%B6%E7%99%BC%E5%B8%83+%E7%89%88%E6%9C%AC+inurl%3Apublish%2Easp" +
"&pn=" + startIndex + "&cl=0";
URL url = new URL(baseUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder html = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) html.append(line);
reader.close();
String urlStr = "https://www.google.com/search?q=%E8%BB%9F%E4%BB%B6%E7%99%BC%E5%B8%83+%E7%89%88%E6%9C%AC+inurl%3Apublish.asp" +
"&hl=zh-CN&lr=&newwindow=1&start=" + startIndex + "&sa=N&ie=UTF-8";
HttpURLConnection conn = (HttpURLConnection) new URL(urlStr).openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/4.0"); // 關鍵:否則 Google 回傳錯誤
conn.connect();
// 後續讀取同百度
import java.util.regex.*;
import java.util.StringTokenizer;
public class UrlAnalyzer {
private static final Pattern BAIDU_NOISE = Pattern.compile("baidu", Pattern.CASE_INSENSITIVE);
private static final Pattern GOOGLE_NOISE = Pattern.compile("google|cache", Pattern.CASE_INSENSITIVE);
public static void analyze(String html, String engine) {
StringTokenizer st = new StringTokenizer(html, " <>\"");
Pattern noise = "baidu".equalsIgnoreCase(engine) ? BAIDU_NOISE : GOOGLE_NOISE;
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (!noise.matcher(token).find() && token.length() > 7) {
// 簡易擷取 https://... 片段
int idx = token.indexOf("https://");
if (idx >= 0) {
String url = token.substring(idx);
// 進一步清理尾部雜字
url = url.replaceAll("[^a-zA-Z0-9:/._?&=%#-].*$", "");
saveUrl(url);
}
}
}
}
private static void saveUrl(String url) {
// 寫入檔案或資料庫
System.out.println("Found: " + url);
}
}
robots.txt 與服務條款,合法合規使用。搜尋引擎爬蟲是低成本、高效率的網址蒐集手段。掌握 HTTP 模擬、編碼處理、雜訊過濾與反爬蟲應對,即可構建實用的資料採集管線。