JSOUP Очистить только подстраницы / нет внешних ссылок - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть следующий код, и я пытаюсь очистить сайт - но только подстраницы (или относительные ссылки).Я не хочу скрести ссылки, которые ведут на внешние сайты.Я использую 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 голосов
/ 20 сентября 2018

Вам необходимо изменить код так, чтобы проверка была не только для того, чтобы увидеть, была ли ссылка посещена до очистки, но также и для того, чтобы ссылка была внутрисайтовой ссылкой.Поэтому оператор 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 сайта.

...