You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
7.2 KiB
191 lines
7.2 KiB
package main;
|
|
|
|
import controller.CrawlerController;
|
|
import model.ResultContainer;
|
|
import model.CrawlResult;
|
|
import view.CrawlerView;
|
|
import exception.NetworkException;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class CrawlerCLI {
|
|
public static void main(String[] args) {
|
|
CrawlerView view = new CrawlerView();
|
|
CrawlerController controller = new CrawlerController(view);
|
|
|
|
view.showWelcome();
|
|
|
|
if (args.length > 0) {
|
|
handleCommandLineArgs(view, controller, args);
|
|
} else {
|
|
runInteractiveMode(view, controller);
|
|
}
|
|
|
|
view.showGoodbye();
|
|
}
|
|
|
|
private static void handleCommandLineArgs(CrawlerView view, CrawlerController controller, String[] args) {
|
|
String command = args[0].toLowerCase();
|
|
|
|
switch (command) {
|
|
case "dangdang":
|
|
case "1":
|
|
runDangDang(view, controller);
|
|
break;
|
|
case "weather":
|
|
case "2":
|
|
runWeather(view, controller);
|
|
break;
|
|
case "maoyan":
|
|
case "3":
|
|
runMaoyan(view, controller);
|
|
break;
|
|
case "train":
|
|
case "4":
|
|
runTrain12306(view, controller);
|
|
break;
|
|
case "csdn":
|
|
case "7":
|
|
runCsdn(view, controller);
|
|
break;
|
|
case "all":
|
|
case "5":
|
|
controller.runAllCrawlers();
|
|
break;
|
|
case "help":
|
|
case "6":
|
|
case "-h":
|
|
case "--help":
|
|
view.showUsage();
|
|
break;
|
|
default:
|
|
view.showError("未知命令: " + command);
|
|
view.showUsage();
|
|
}
|
|
}
|
|
|
|
private static void runDangDang(CrawlerView view, CrawlerController controller) {
|
|
view.showHeader("当当网图书爬虫");
|
|
ResultContainer<List<CrawlResult>> result = controller.runDangDangCrawler();
|
|
if (result.isFailure() && result.getMessage().contains("网络")) {
|
|
System.out.println();
|
|
System.out.println("============================================");
|
|
System.out.println("!!! IOException: 网络异常 - " + result.getMessage());
|
|
System.out.println("!!! 原因: " + "无网络连接或目标网站不可达");
|
|
System.out.println("============================================");
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
private static void runWeather(CrawlerView view, CrawlerController controller) {
|
|
view.showHeader("中国天气网爬虫");
|
|
ResultContainer<List<CrawlResult>> result = controller.runWeatherCrawler();
|
|
if (result.isFailure() && result.getMessage().contains("网络")) {
|
|
System.out.println();
|
|
System.out.println("============================================");
|
|
System.out.println("!!! IOException: 网络异常 - " + result.getMessage());
|
|
System.out.println("!!! 原因: " + "无网络连接或目标网站不可达");
|
|
System.out.println("============================================");
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
private static void runMaoyan(CrawlerView view, CrawlerController controller) {
|
|
view.showHeader("猫眼电影爬虫");
|
|
ResultContainer<List<CrawlResult>> result = controller.runMaoyanMovieCrawler();
|
|
if (result.isFailure() && result.getMessage().contains("网络")) {
|
|
System.out.println();
|
|
System.out.println("============================================");
|
|
System.out.println("!!! IOException: 网络异常 - " + result.getMessage());
|
|
System.out.println("!!! 原因: " + "无网络连接或目标网站不可达");
|
|
System.out.println("============================================");
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
private static void runTrain12306(CrawlerView view, CrawlerController controller) {
|
|
view.showHeader("12306火车票爬虫");
|
|
ResultContainer<List<CrawlResult>> result = controller.runTrain12306Crawler();
|
|
if (result.isFailure() && result.getMessage().contains("网络")) {
|
|
System.out.println();
|
|
System.out.println("============================================");
|
|
System.out.println("!!! IOException: 网络异常 - " + result.getMessage());
|
|
System.out.println("!!! 原因: " + "无网络连接或目标网站不可达");
|
|
System.out.println("============================================");
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
private static void runCsdn(CrawlerView view, CrawlerController controller) {
|
|
view.showHeader("CSDN博客爬虫");
|
|
ResultContainer<List<CrawlResult>> result = controller.runCsdnBlogCrawler();
|
|
if (result.isFailure() && result.getMessage().contains("网络")) {
|
|
System.out.println();
|
|
System.out.println("============================================");
|
|
System.out.println("!!! IOException: 网络异常 - " + result.getMessage());
|
|
System.out.println("!!! 原因: " + "无网络连接或目标网站不可达");
|
|
System.out.println("============================================");
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
private static void runInteractiveMode(CrawlerView view, CrawlerController controller) {
|
|
boolean running = true;
|
|
|
|
while (running) {
|
|
view.showMenu(getDefaultMenu());
|
|
String input = view.readInput();
|
|
|
|
if (input == null || input.trim().isEmpty()) {
|
|
view.showWarning("请输入有效选项");
|
|
continue;
|
|
}
|
|
|
|
switch (input.trim()) {
|
|
case "1":
|
|
runDangDang(view, controller);
|
|
break;
|
|
case "2":
|
|
runWeather(view, controller);
|
|
break;
|
|
case "3":
|
|
runMaoyan(view, controller);
|
|
break;
|
|
case "4":
|
|
runTrain12306(view, controller);
|
|
break;
|
|
case "5":
|
|
controller.runAllCrawlers();
|
|
break;
|
|
case "6":
|
|
view.showUsage();
|
|
break;
|
|
case "7":
|
|
runCsdn(view, controller);
|
|
break;
|
|
case "0":
|
|
case "exit":
|
|
case "quit":
|
|
running = false;
|
|
break;
|
|
default:
|
|
view.showError("无效选项: " + input.trim());
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Map<String, String> getDefaultMenu() {
|
|
Map<String, String> menu = new HashMap<>();
|
|
menu.put("1", "当当网图书爬虫");
|
|
menu.put("2", "中国天气网爬虫");
|
|
menu.put("3", "豆瓣电影Top250爬虫");
|
|
menu.put("4", "12306火车票爬虫");
|
|
menu.put("5", "运行所有爬虫");
|
|
menu.put("6", "查看使用说明");
|
|
menu.put("7", "CSDN博客爬虫");
|
|
menu.put("0", "退出系统");
|
|
return menu;
|
|
}
|
|
}
|