我正在使用网络抓取工具,但我无法解决连续第二天遇到的问题。
这种方法的问题是当机器人应该访问网站时,收集所有 URL,并将其中尚未访问的 URL 添加到 List< String> "toVisit"
有问题的代码:
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,我不知道为什么。
我试过删除“!” 在语句中创建一个 else 部分并粘贴 toVisit.add(x) 那里,但它没有帮助。
当我打印每个网址时,机器人会访问相同的网址两次甚至五次。
编辑(访问定义)
static List<String> visited = new ArrayList<String>();
EDIT2(整个代码)
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);
}
}
}