如何使用JAVA递归地获取所有网站链接?

如何使用JAVA递归地获取所有网站链接?,java,list,recursion,Java,List,Recursion,我需要写一个代码,将得到一个网站的所有链接递归。因为我是新来的,这就是我到目前为止得到的 List<WebElement> no = driver.findElements(By.tagName("a")); nooflinks = no.size(); for (WebElement pagelink : no) { String linktext = pagelink.getText(); link = pagelink.getAttribute("href");

我需要写一个代码,将得到一个网站的所有链接递归。因为我是新来的,这就是我到目前为止得到的

List<WebElement> no = driver.findElements(By.tagName("a"));
nooflinks = no.size();
for (WebElement pagelink : no)
{
    String linktext = pagelink.getText();
    link = pagelink.getAttribute("href"); 
}
List no=driver.findElements(按.tagName(“a”);
Noofrinks=编号大小();
用于(WebElement页面链接:否)
{
String linktext=pagelink.getText();
link=pagelink.getAttribute(“href”);
}
现在我需要做的是,如果列表找到同一个域的链接,那么它应该从该URL获取所有链接,然后返回到上一个循环并从下一个链接继续。这应该一直持续到找到整个网站中的最后一个URL为止。也就是说,例如,主页是基本URL,它有其他页面的5个URL,然后在获得5个URL中的第一个URL后,循环应该获得第一个URL的所有链接,返回主页,并从第二个URL恢复。现在,如果第二个URL有子URL,那么循环应该首先找到这些URL的链接,然后恢复到第二个URL,然后返回主页并从第三个URL恢复


有人能帮我吗?

你可以使用
Set
HashSet
。您可以这样尝试:

Set<String> getLinksFromSite(int Level, Set<String> Links) {
    if (Level < 5) {
        Set<String> locallinks =  new HashSet<String>();
        for (String link : Links) {
            Set<String> new_links = ;
            locallinks.addAll(getLinksFromSite(Level+1, new_links));
        }
        return locallinks;
    } else {
        return Links;
    }

}
设置getLinksFromSite(内部级别,设置链接){
如果(级别<5){
Set locallinks=new HashSet();
用于(字符串链接:链接){
设置新的_链接=;
addAll(getLinksFromSite(级别+1,新链接));
}
返回本地链接;
}否则{
返回链接;
}
}

我最近看到了这篇文章。我不知道你是否还在为这个问题寻找解决方案。如果没有,我认为它可能对其他人有用:

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.Iterator;
public class TestRecursiveURLReading {
public static void main(String[] args) {
 try {
    String url="";
    HashMap<String, String> h = new HashMap<>(); 
    Url = "https://abidsukumaran.wordpress.com/";
    Document doc = Jsoup.connect(url).get();

    //  Page Title
    String title = doc.title();
   //System.out.println("title: " + title);

  //  Links in page
  Elements links = doc.select("a[href]");
  List url_array = new ArrayList();
  int i=0;
  url_array.add(url);
  String root = url;
  h.put(url, title);
  Iterator<String> keySetIterator = h.keySet().iterator();
  while((i<=h.size())){
      try{
          url = url_array.get(i).toString();
      doc = Jsoup.connect(url).get();
      title = doc.title();
      links = doc.select("a[href]");

    for (Element link : links) {

   String res= h.putIfAbsent(link.attr("href"), link.text());
   if (res==null){
   url_array.add(link.attr("href"));
   System.out.println("\nURL: " + link.attr("href"));
   System.out.println("CONTENT: " + link.text());
   }
  } 
 }catch(Exception e){
        System.out.println("\n"+e);
      }

      i++;

     }
     } catch (Exception e) {
     e.printStackTrace();
     }
    }
   }
import java.io.IOException;
导入java.net.MalformedURLException;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
导入org.jsoup.select.Elements;
导入java.util.Iterator;
公共类TestRecursiveURLReading{
公共静态void main(字符串[]args){
试一试{
字符串url=“”;
HashMap h=新的HashMap();
Url=”https://abidsukumaran.wordpress.com/";
Document doc=Jsoup.connect(url.get();
//页面标题
字符串title=doc.title();
//System.out.println(“标题:”+标题);
//页面中的链接
Elements links=doc.select(“a[href]”);
List url_array=new ArrayList();
int i=0;
url_数组。添加(url);
字符串根=url;
h、 put(url、标题);
迭代器keySetIterator=h.keySet().Iterator();

虽然((我有一些关于操纵URL的信息,如果您试图确定某个链接是否在同一个域中,这可能会有所帮助。不保证,我还没有进一步研究过它。)Hello R.t.,我是否将此代码与代码中现有的for循环放在一起?还是应该将我的代码全部替换为此?