Я пытаюсь создать базовый веб-искатель, основанный на базовой глубине поиска. Вот мой текущий код:Выполнение глубины Первый поиск продолжается после первого прохода?
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.*;
import java.net.*;
public class DepthFirstSpider {
private List<String> visitedList; //web pages already visited
private static String hrefExpr = "href\\s*=\\s*\"([^\"]+)\"";
private static Pattern pattern = Pattern.compile(hrefExpr);
private int limit;
private static Matcher matcher;
private static URL contextURL;
private static URL url;
public List<String> getVisitedList() { return visitedList; }
//initialize the visitedlist and limit instance variables. Visit the starting url.
public DepthFirstSpider(int limit, String startingURL) {
visitedList = new ArrayList<String>();
this.limit = limit;
try {
contextURL = new URL(startingURL);
} catch (MalformedURLException e) {
}
visit(startingURL);
}
//print and add urlString to list of visited web pages
//create url and connect, read through html contents:
//when href encountered create new url relative to the current url and visit it (if not already visited and limit not reached)
public void visit(String urlString) {
try{
url = new URL(contextURL, urlString);
URLConnection connection = url.openConnection();
InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream));
String nextLine;
while((nextLine=reader.readLine()) != null){
matcher = pattern.matcher(nextLine);
while(matcher.find() && limit > 0 && !visitedList.contains(url.toString())){
System.out.println("visiting " + url.toString());
visitedList.add(url.toString());
visit(matcher.group(1));
limit--;
}
}
} catch (MalformedURLException e){
} catch (IOException e){
}
}
}
поиска в настоящее время снимает вниз дерево веб-страниц без проблем. Мне нужна помощь, чтобы он вернулся, а затем перешел на страницы, которые он пропустил. Спасибо за помощь.
У меня есть ширина первого искателя, который делает именно это. Однако я хочу использовать этот конкретный метод поиска здесь. – kmaz13
Итак, вы должны использовать стек вместо очереди для toVisit. Подойдя как можно глубже, вы захотите пойти к следующему глубочайшему родному брату. Имеет ли это смысл? Я бы предположил, что вы все равно захотите добавить hrefs, когда вы столкнетесь с ними, поскольку это было бы проще, чем перемещение части страницы, а затем последующее перемещение остальной части позже. – ulu5
Это имеет смысл, не могли бы вы привести пример? – kmaz13