gpt4 book ai didi

java - 循环在网络爬虫项目中效果不佳

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:20:36 24 4
gpt4 key购买 nike

对于练习,我想制作自己的网络爬虫,但我在重复调用我的爬网方法时遇到问题。它应该从我的链接数组中的每个链接开始,一直持续到我决定中止整个程序,但它只适用于该数组中的第一个元素,所以它只是来回移动而没有任何进展。我该如何解决这个问题?

爬虫.java

package regularmikey.mikecrawler;

import java.io.IOException;

import org.jsoup.HttpStatusException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Crawler implements Runnable {

private Elements links;
private Document doc;
private String start_url;


public Crawler(){};
public Crawler(String url){start_url = url;};


public void crawl(String url) {

try {
System.out.println(url);
doc = Jsoup.connect(url).get();

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

links = doc.select("a[href]");
for (Element link : links) {
if(AdressValidator.validAddress(link.attr("href"))) {
crawl(link.attr("href"));
}
}
} catch (org.jsoup.UnsupportedMimeTypeException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}

}


public void run() {

crawl(start_url);

}
}

应用程序.java

package regularmikey.mikecrawler;

public class App
{
public static void main( String[] args )
{
Thread thread = new Thread(new Crawler("http://facebook.com"));
thread.run();

}
}

最佳答案

您可以创建一个您已经到达的 url 列表。

private List<String> urls = new ArrayList<String>();

//some code

for (Element link : links) {
if(!urls.contains(link.attr("abs:href"))){
urls.add(link.attr("abs:href"));
crawl(link.attr("abs:href"));
}
}

编辑:用@PallyP 回答完成

关于java - 循环在网络爬虫项目中效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706495/

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