JSOUP 只抓取子页面/没有外部链接
JSOUP Scrape only subpages / no external links
我有以下代码,我正在尝试抓取网站 - 但仅限子页面(或相关链接)。我不想抓取指向外部网站的链接。我正在使用 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);
}
}
谁能告诉我如何只抓取页面的子页面 - 所以没有外部链接?
您需要修改代码,这样检查不仅要查看 link 在抓取之前是否已被访问,还要检查 link 是否是现场 link.所以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。
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);
}
}
谁能告诉我如何只抓取页面的子页面 - 所以没有外部链接?
您需要修改代码,这样检查不仅要查看 link 在抓取之前是否已被访问,还要检查 link 是否是现场 link.所以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。