我有以下代码,我正在尝试抓取网站 - 但仅限子页面(或相关链接)。我不想抓取指向外部网站的链接。我正在使用 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/