Я работаю над веб-скребком и не могу решить проблему, с которой сталкиваюсь второй день подряд.
Проблема этого метода заключается в том, что бот должен посещать веб-сайт, собрать все URL и добавить те из них, которые он еще не посещал, в List "toVisit"
Problemati c code:
Elements temp = userAgent.visit(currentUrl).findEvery("<a href>");
for (Element e : temp) {
String x = e.getAt("href");
if(!visited.contains(x)) {
toVisit.add(x);
}
}
Однако в операторе if не фильтрует (или фильтрует его так, как я не узнал) URL-адреса, и я понятия не имею, почему.
Я пытался удалить "!" в заявлении и создайте другую часть и вставьте туда toVisit.add (x), но это не помогло.
Когда я печатаю каждый URL, бот посещает одни и те же два или даже пять раз.
РЕДАКТИРОВАТЬ (посещено определено)
static List<String> visited = new ArrayList<String>();
РЕДАКТИРОВАТЬ2 (весь код)
import java.util.ArrayList;
import java.util.List;
import com.jaunt.*;
public class b03 {
static String currentUrl = "https://stackoverflow.com";
static String stayAt = currentUrl;
static String searchingTerm = "";
static int toSearch = 50;
static List<String> toVisit = new ArrayList<String>();
static List<String> visited = new ArrayList<String>();
static UserAgent userAgent = new UserAgent();
public static void main(String[] args) {
System.out.println("*started searching...*");
while(visited.size() < toSearch)
visitUrl(currentUrl);
System.out.println("\n\n*done*\n\n");
}
public static void visitUrl(String url) {
visited.add(url);
evaluateUrls();
searchTerm();
toVisit.remove(0);
currentUrl = toVisit.get(0);
}
public static void searchTerm() {
//if(userAgent.doc.getTextContent().contains(searchingTerm))
System.out.println(visited.size() +") "+ currentUrl);
}
public static void evaluateUrls() {
try {
Elements temp = userAgent.visit(currentUrl).findEvery("<a href>");
for (Element e : temp) {
String x = e.getAt("href");
if(!visited.contains(x) && x.contains(stayAt)) {
toVisit.add(x);
}
}
}catch (Exception e) {
System.out.println(e);
}
}
}