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

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;
}
}