我写了一个程序,从网页上获取所有链接,然后从该子页面获取所有链接。
例如:我有页面www.example.com并找到了其他五个链接:example.com/home,example.com/contact等。我应该转到这些链接再次检查对于该网页上的链接。
我该如何实现?
另外,我需要一个已访问过的页面和被阻止页面的列表(例如,链接到Facebook,因为那时我认为它将处于无限循环中)。
到目前为止,这是我的代码(仅提供来自一个网页而非其子页面的链接):
0
答案 0 :(得分:1)
您可以使用递归。将代码放在方法中,例如
void getLinks(String url, Set<String> urls) {
if (urls.contains(url)) {
return;
}
urls.add(url);
try {
Document doc = Jsoup.connect(url).get();
Elements elements = doc.select("a");
for(Element element : elements){
System.out.println(element.absUrl("href"));
getLinks(element.absUrl("href"), urls);
}
} catch (IOException e) {
e.printStackTrace();
}
}
然后你可以这样开始执行:
Set<String> links = new HashSet<>();
getLinks("https://www.example.com/", links);
答案 1 :(得分:0)
将所有链接添加到您的链接列表
try {
Document doc = Jsoup.connect("https://www.example.com/").get();
Elements elements = doc.select("a");
for(Element element : elements){
System.out.println(element.absUrl("href"));
list.add(element.absUrl("href")); //<-------HERE*****
}
} catch (IOException e) {
e.printStackTrace();
}
然后您可以使用
以与连接到第一个相同的方式连接到每个那些for(int i = 0; i < list.size(); i++){
doc = Jsoup.connect(list.get(i)).get();
//do whatever you want
}
如果您不想要特定的链接,我建议您将不需要的链接放在一个散列图中,并在将它们添加到您的其他页面链接列表之前检查它们。