为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地6264312 2021-09-29 13:48:45
我有以下代码,我正在尝试抓取一个网站 - 但只有子页面(或相关链接)。我不想抓取导致外部网站的链接。我正在使用 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 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-09-29
  • 1 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信