gpt4 book ai didi

java - 统计 url 中的外部链接

转载 作者:行者123 更新时间:2023-12-02 07:34:37 28 4
gpt4 key购买 nike

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”外部链接计数:1

主要步骤:1链接:“http://test.com/some”外部链接计数:2

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

最佳答案

递归似乎是一条出路。然而,在递归中,您应该始终定义退出策略,否则您将陷入无限循环。

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

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

修改后的代码

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;

}
}

关于java - 统计 url 中的外部链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12423334/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com