Я пытаюсь создать веб-сканер, хотя я столкнулся с проблемой, когда код заканчивается рано и не создает файл. Любая помощь будет оценена. Я пытаюсь заставить этот базовый код работать до добавления других необходимых мне функций (таких как реализация стеков и квенов для хранения веб-адресов, а также жесткого ограничения на доступ к веб-страницам).
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
public class WebCrawler {
private HashSet<String> links;
private List<List<String>> articles;
private static final int MAX_DEPTH = 2;
public WebCrawler() {
links = new HashSet<String>();
articles = new ArrayList<>();
}
public void getPageLinks(String URL, int depth) {
if (!links.contains(URL) && (depth < MAX_DEPTH)){
System.out.println(">> Depth: " + depth + " [ " + URL + "]");
try {
links.add(URL);
Document document = Jsoup.connect(URL).get();
Elements otherLinks = document.select("a[href^=\"http://www.mkyong.com/page/\"]");
depth++;
for (Element page : otherLinks) {
if (links.add(URL)) {
System.out.println(URL);
}
getPageLinks(page.attr("abs:href"), depth);
}
} catch (IOException e) {
System.err.println(e.getMessage());
}
}
}
public void getArticles() {
links.forEach(x -> {
Document document;
try {
document = Jsoup.connect(x).get();
Elements articleLinks = document.select("h2 a[href^=\"http://www.mkyong.com/\"]");
for (Element article : articleLinks) {
if (article.text().matches("^.*?(Java 8|java 8|JAVA 8).*$")) {
System.out.println(article.attr("abs:href"));
ArrayList<String> temporary = new ArrayList<>();
temporary.add(article.text());
temporary.add(article.attr("abs:href"));
articles.add(temporary);
}
}
} catch (IOException e) {
System.err.println(e.getMessage());
}
});
}
public void writeToFile(String filename) {
FileWriter writer;
try {
writer = new FileWriter(filename);
articles.forEach(a -> {
try {
String temp = "- Title: " + a.get(0) + " (link: " + a.get(1) + ")\n";
System.out.println(temp);
writer.write(temp);
} catch (IOException e) {
System.err.println(e.getMessage());
}
});
writer.close();
} catch (IOException e) {
System.err.println(e.getMessage());
}
}
public static void main(String[] args) {
WebCrawler bwc = new WebCrawler();
bwc.getPageLinks("http://www.mkyong.com", 0);
bwc.getArticles();
bwc.writeToFile("Java 8 Articles");
}
}