使用 JSoup(递归)从网站中提取所有 URL
在此示例中,我们将从网站中提取所有 Web 链接。我用 http://stackoverflow.com/
来说明。这里使用递归,其中每个获得的链接的页面被解析为存在 anchor tag
并且该链接再次被提交给相同的函数。
条件 if(add && this_url.contains(my_site))
仅将结果限制在你的域中。
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class readAllLinks {
public static Set<String> uniqueURL = new HashSet<String>();
public static String my_site;
public static void main(String[] args) {
readAllLinks obj = new readAllLinks();
my_site = "stackoverflow.com";
obj.get_links("http://stackoverflow.com/");
}
private void get_links(String url) {
try {
Document doc = Jsoup.connect(url).userAgent("Mozilla").get();
Elements links = doc.select("a");
if (links.isEmpty()) {
return;
}
links.stream().map((link) -> link.attr("abs:href")).forEachOrdered((this_url) -> {
boolean add = uniqueURL.add(this_url);
if (add && this_url.contains(my_site)) {
System.out.println(this_url);
get_links(this_url);
}
});
} catch (IOException ex) {
}
}
}
该程序将花费很多时间来执行,具体取决于你的网站。可以扩展上述代码以从特定网站提取数据(例如页面或文本或图像的标题)。我建议你先删除公司的使用条款, 然后再将其删除。
该示例使用 JSoup 库来获取链接,你也可以使用 your_url/sitemap.xml
获取链接。