如何在Java中从网页及其子页获取所有链接

如何在Java中从网页及其子页获取所有链接,java,jsoup,Java,Jsoup,我编写了一个程序,从一个网页获取所有链接,然后从该子页获取所有链接。 例如:我有一个页面,找到了其他五个链接:,等等。我应该转到这些链接,然后再次检查该页面上的链接 我应该如何实现这一点? 另外,我需要一个已经访问过的页面和被阻止页面的列表(例如,链接到Facebook,因为我认为它将处于无限循环中) 以下是我迄今为止的代码(它只提供一个网页的链接,而不是它的子页面): 将所有链接添加到链接列表后 try { Document doc = Jsoup.connect("https://w

我编写了一个程序,从一个网页获取所有链接,然后从该子页获取所有链接。

例如:我有一个页面,找到了其他五个链接:,等等。我应该转到这些链接,然后再次检查该页面上的链接

我应该如何实现这一点?

另外,我需要一个已经访问过的页面和被阻止页面的列表(例如,链接到Facebook,因为我认为它将处于无限循环中)

以下是我迄今为止的代码(它只提供一个网页的链接,而不是它的子页面):


将所有链接添加到链接列表后

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();
}
试试看{
Document doc=Jsoup.connect(“https://www.example.com/).get();
元素=文件选择(“a”);
for(元素:元素){
System.out.println(element.absUrl(“href”);

list.add(element.absUrl(“href”);//您可以使用递归。例如,将代码放在方法中

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();
    }
}
void getLinks(字符串url,设置url){
if(url.contains(url)){
返回;
}
添加(url);
试一试{
Document doc=Jsoup.connect(url.get();
元素=文件选择(“a”);
for(元素:元素){
System.out.println(element.absUrl(“href”);
getLinks(element.absUrl(“href”),url);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
然后可以按如下方式开始执行:

Set<String> links = new HashSet<>();
getLinks("https://www.example.com/", links);
Set links=newhashset();
获取链接(“https://www.example.com/“,链接);

你需要写得更清楚。你的英语很差,而且你没有真正描述你想做得很好的事情。例如,“阻止”是什么意思?当我从主页获得链接,然后我会访问每个链接,然后再次获取所有链接。等等等等。blocket-当它检测到来自另一个网站的链接时(facebook/com等)为什么会有,所以没有寻找,因为它是一个不同的页面,可以进入无限循环1.我从主站点获得链接2.去他们每个人,然后再次从这个站点获得所有链接3.再次步骤2…再次2当我从这个域的所有站点获得所有链接时,我的程序通过谷歌运行到这里我发现这是因为这行:
if(url.contains(url))
。我传入的URL总是包含它自己,所以它总是会立即返回。@Jake Typo!现在修复了,太棒了,谢谢!我原以为这就是你的意思,但在查看其他人的代码时总是很难说清楚。只是一个便条,因为没有人在你的帖子上留下评论。你使用HashMap来放置不需要的链接如果您使用HashSet,那么这个检查实际上是不必要的。
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);