JSOUP 只抓取子页面/没有外部链接

JSOUP Scrape only subpages / no external links

我有以下代码,我正在尝试抓取网站 - 但仅限子页面(或相关链接)。我不想抓取指向外部网站的链接。我正在使用 Java 和 jsoup。

public void scrape(String url) {

    String docUrl = url;

    try {

        Document document = Jsoup.connect(docUrl).get();
        Elements foundUrls = document.select("a[href]");

        System.out.printf("Found %d links. %n", foundUrls.size());

        for (Element  foundUrl : foundUrls) {


            String nextUrl = foundUrl.attr("href");

            if (visitedLinks.contains(nextUrl)) {
                System.out.println("Link already visited. Skipping URL.");
            }

            else {

                System.out.println("Scraping: "+ nextUrl);
                visitedLinks.add(nextUrl);
                scrape(nextUrl);
            }

        }
    } catch (Exception ex) {

        System.out.printf("Could not read %s.%n", url);
    }
}

谁能告诉我如何只抓取页面的子页面 - 所以没有外部链接?

您需要修改代码,这样检查不仅要查看 link 在抓取之前是否已被访问,还要检查 link 是否是现场 link.所以if语句应该改为:

if (visitedLinks.contains(nextUrl) || !isInSiteLink(nextUrl) {
    // don't scrape
} else {
    // your scraping method here
}

那你就要实现这个方法了。它可能看起来像

boolean isInSiteLink(String url) {
    return (url.starts with(baseUrl) || url.startsWith("/") || url.starts with("./") || url.starts with("../"));
}

其中 baseUrl 是站点的基础 URL。