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

时间:2018-09-19 20:43:23

标签: java web-scraping jsoup

我有以下代码,我正在尝试抓取网站-但仅抓取子页面(或相对链接)。我不希望抓取通往外部网站的链接。我正在使用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);
    }
}

有人可以告诉我如何仅抓取页面的子页面-而不需要外部链接吗?

1 个答案:

答案 0 :(得分:3)

您需要修改代码,以便进行检查不仅是在刮刮之前查看链接是否已被访问,而且还检查该链接是否为站点内链接。因此,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。