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

Java 實作搜尋引擎爬蟲:自動蒐集特定網址

     編輯:Java 相關知識

應用場景

需大量蒐集特定類型網址(如軟體發布頁、論壇、郵件清單)時,人工不可行。利用搜尋引擎的 關鍵字 與 inurl: 語法,搭配 HTTP 模擬請求與 HTML 解析,可自動化完成。

核心原理

  • inurl:關鍵字:限定網址本身包含特定字串 (如 inurl:publish.asp)。
  • 組合關鍵字:軟體發布 版本 inurl:publish.asp。
  • 分頁參數:百度 pn、Google start,每頁 20 筆,迴圈抓取。
  • 過濾雜訊:移除搜尋引擎自身連結 (快照、相似頁面等)。

步驟 1:模擬搜尋請求取回 HTML

百度範例

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();

Google 範例 (需偽裝 User-Agent)

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();
// 後續讀取同百度

步驟 2:解析 HTML 擷取有效網址

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);
    }
}

限制與注意事項

  • Google 單查詢上限 1000 筆;百度約 760 筆。需增加關鍵字縮小範圍。
  • 頻率過高會被封 IP,需加入延遲、代理池、驗證碼處理。
  • HTML 結構變動需維護解析邏輯;建議使用 Jsoup 等成熟解析庫。
  • 遵守 robots.txt 與服務條款,合法合規使用。

進階擴充

  • 多執行緒並發抓取(配合線程池、信號量控制併發數)。
  • 儲存至資料庫並建立索引,支援後續全文檢索。
  • 結合關鍵字擴展 (同義詞、相關詞) 提升覆蓋率。

結語

搜尋引擎爬蟲是低成本、高效率的網址蒐集手段。掌握 HTTP 模擬、編碼處理、雜訊過濾與反爬蟲應對,即可構建實用的資料採集管線。

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