首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算来自urls的外部链接

计算来自urls的外部链接
EN

Stack Overflow用户
提问于 2012-09-14 19:10:59
回答 1查看 1.2K关注 0票数 0
代码语言:javascript
复制
public class Scanner {
    private HtmlProcessor hp;
    private String baseUrl;
    private int step = 0;

    public Scanner(String baseUrl) {
        this.hp = new HtmlProcessor();
        this.baseUrl = LinkParser.parseLink(baseUrl);
    }

    public void info(String url) throws IOException {


        String[] links =  hp.getLinksAndHrefs(url);
        System.out.println("Link : " + url + "\n"
                          +"ExtLinksCount : " + externalLinksCount(links) + "\n"
                          +"Steps to main : " + step
                          );
        String strippedLink;

        for (String link : links) {

            strippedLink = LinkParser.parseLink(link);

            if ( strippedLink.contains(this.baseUrl) && !strippedLink.equals(this.baseUrl) ) {
                ++ step; 
                info(link);
            }

            step = 0;
        }

    }

    public int externalLinksCount(String[] links) {
        int counter = 0;        

        String parsedLink;

        for (String link : links) {
             parsedLink = link;

            if ( ! ( parsedLink.contains( this.baseUrl ) ) ) {
                ++counter;
            }
        }


        return counter;

    }
}

我们有一些关于输入的链接:"http://test.com“这个链接有链接:"http://test.com"”,"http://test.com/some"“,"http://google.com”和"http://test.com/some“有链接:"http://facebook.com","some.com”

需要的结果是:步骤到主:0链接:"http://test.com“ExtLinksCount :1

主要步骤:1链接:"http://test.com/some“ExtLinksCount :2

我需要计算此页面上的所有外部链接,如果此页面有内部链接,请转到内部链接,并计算此页面上的所有外部链接以及返回到基页的步骤等。我知道如何从页面获取链接,但我不知道如何正确解决这个问题。在我的变体中,我用递归解决了这个问题。但是如果站点有相同的基础链接,程序就会崩溃。

EN

回答 1

Stack Overflow用户

发布于 2012-09-14 19:21:08

递归似乎是一条可行的道路。然而,在递归中,你应该总是定义你的退出策略,否则你会陷入无限循环。

仅检查url是否等于baseurl是不够的。如果两个子页面相互链接会导致无限循环。

因此,我建议保留已解析链接的列表。在ur info()的第一个链接中,检查列表中是否包含URL,如果包含URL,则忽略并继续,否则添加到列表中。

修改后的代码

代码语言:javascript
复制
public class Scanner {
    private HtmlProcessor hp;
    private String baseUrl;
    private int step = 0;
    private List parsedLinks;

    public Scanner(String baseUrl) {
        this.hp = new HtmlProcessor();
        this.baseUrl = LinkParser.parseLink(baseUrl);
        this.parsedLinks = new ArrayList();
    }

    public void info(String url) throws IOException {
        if (!parsedLinks.contains(url)) {

            parsedLinks.add(url);

            String[] links = hp.getLinksAndHrefs(url);
            System.out.println("Link : " + url + "\n" + "ExtLinksCount : "
                    + externalLinksCount(links) + "\n" + "Steps to main : "
                    + step);
            String strippedLink;

            for (String link : links) {

                strippedLink = LinkParser.parseLink(link);

                if (strippedLink.contains(this.baseUrl)
                        && !strippedLink.equals(this.baseUrl)) {
                    ++step;
                    info(link);
                }

                step = 0;
            }
        }

    }

    public int externalLinksCount(String[] links) {
        int counter = 0;

        String parsedLink;

        for (String link : links) {
            parsedLink = link;

            if (!(parsedLink.contains(this.baseUrl))) {
                ++counter;
            }
        }

        return counter;

    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12423334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档