如何从Java页面及其子页面获取所有链接

时间:2016-06-22 19:14:07

标签: java jsoup

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

例如:我有页面www.example.com并找到了其他五个链接:example.com/homeexample.com/contact等。我应该转到这些链接再次检查对于该网页上的链接。

我该如何实现?

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

到目前为止,这是我的代码(仅提供来自一个网页而非其子页面的链接):

0

2 个答案:

答案 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
}

如果您不想要特定的链接,我建议您将不需要的链接放在一个散列图中,并在将它们添加到您的其他页面链接列表之前检查它们。