使用 JSoup(遞迴)從網站中提取所有 URL

在此示例中,我們將從網站中提取所有 Web 連結。我用 http://stackoverflow.com/來說明。這裡使用遞迴,其中每個獲得的連結的頁面被解析為存在 anchor tag 並且該連結再次被提交給相同的函式。

條件 if(add && this_url.contains(my_site)) 僅將結果限制在你的域中

    import java.io.IOException;
    import java.util.HashSet;
    import java.util.Set;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    
    public class readAllLinks {
    
        public static Set<String> uniqueURL = new HashSet<String>();
        public static String my_site;
    
        public static void main(String[] args) {
    
            readAllLinks obj = new readAllLinks();
            my_site = "stackoverflow.com";
            obj.get_links("http://stackoverflow.com/");
        }
    
        private void get_links(String url) {
            try {
                Document doc = Jsoup.connect(url).userAgent("Mozilla").get();
                Elements links = doc.select("a");

                if (links.isEmpty()) {
                   return;
                }

                links.stream().map((link) -> link.attr("abs:href")).forEachOrdered((this_url) -> {
                    boolean add = uniqueURL.add(this_url);
                    if (add && this_url.contains(my_site)) {
                        System.out.println(this_url);
                        get_links(this_url);
                    }
                });
    
            } catch (IOException ex) {
    
            }
    
        }
    }

該程式將花費很多時間來執行,具體取決於你的網站。可以擴充套件上述程式碼以從特定網站提取資料(例如頁面或文字或影象的標題)。我建議你先刪除公司的使用條款, 然後再將其刪除。

該示例使用 JSoup 庫來獲取連結,你也可以使用 your_url/sitemap.xml 獲取連結。