我有以下代码,我正在尝试抓取一个网站 - 但只有子页面(或相关链接)。我不想抓取导致外部网站的链接。我正在使用 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在哪里。
添加回答
举报
0/150
提交
取消