【问题标题】:JSOUP Scrape only subpages / no external linksJSOUP 只抓取子页面/没有外部链接
【发布时间】:2018-09-20 05:17:41
【问题描述】:

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

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

【问题讨论】:

    标签: java web-scraping jsoup


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      相关资源
      最近更新 更多