我有以下代码,我正在尝试抓取网站-但仅抓取子页面(或相对链接)。我不希望抓取通往外部网站的链接。我正在使用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);
}
}
有人可以告诉我如何仅抓取页面的子页面-而不需要外部链接吗?
答案 0 :(得分:3)
您需要修改代码,以便进行检查不仅是在刮刮之前查看链接是否已被访问,而且还检查该链接是否为站点内链接。因此,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。