java - JSOUP 仅抓取子页面/无外部链接

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

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

最佳答案

您需要修改代码,这样不仅要检查链接在抓取之前是否已被访问过,还要检查该链接是否为站内链接。所以 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。

关于java - JSOUP 仅抓取子页面/无外部链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52413940/

相关文章:

java - 首选可变或不可变集合作为方法参数

regex - IE快速自动化

java - Jsoup Java 获取特定的td

python - 使用 BeautifulSoup 或 golang colly 解析 HTML 时遇到问题

java - 扩展可以是 has-a 关系吗?

Java:检查两个 double 值是否匹配特定的小数位数

java - 通用静态工厂方法问题

java - Jsoup - 提取文本

java - 获取 css 内容,然后为链接 validator 解析外部 css 文件的图像引用

java - 如何在具有延迟加载滚动 Loader.js 的站点中使用 Jsoup