Browse Source

上传文件至 'project/src/main/java/org/example/service'

main
wangyandi 3 weeks ago
parent
commit
7cdeedfd0e
  1. 53
      project/src/main/java/org/example/service/CrawlerService.java

53
project/src/main/java/org/example/service/CrawlerService.java

@ -0,0 +1,53 @@
package org.example.service;
import org.example.exception.CrawlerException;
import org.example.model.Article;
import org.example.strategy.BaiduStrategy;
import org.example.strategy.BingStrategy;
import org.example.strategy.CrawlerStrategy;
import org.example.strategy.CsdnStrategy;
import java.util.ArrayList;
import java.util.List;
public class CrawlerService {
/**
* 聚合搜索同时调用所有策略进行搜索
*/
public List<Article> search(String keyword) throws CrawlerException {
if (keyword == null || keyword.trim().isEmpty()) {
throw new CrawlerException("关键词不能为空!");
}
System.out.println("Service层: 正在调度所有爬虫策略...");
List<CrawlerStrategy> strategies = new ArrayList<>();
strategies.add(new BaiduStrategy());
strategies.add(new BingStrategy());
strategies.add(new CsdnStrategy());
List<Article> allResults = new ArrayList<>();
for (CrawlerStrategy strategy : strategies) {
try {
System.out.println("正在爬取 [" + strategy.getName() + "] ...");
// 调用具体策略的 crawl 方法
List<Article> results = strategy.crawl(keyword);
// 将当前策略的结果添加到总列表中
allResults.addAll(results);
System.out.println("[" + strategy.getName() + "] 爬取完成,获取到 " + results.size() + " 条数据。");
} catch (Exception e) {
// 捕获单个策略的异常,防止因为一个网站挂了导致整个程序崩溃
System.err.println("警告: [" + strategy.getName() + "] 爬取失败: " + e.getMessage());
}
}
System.out.println("搜索结束,共获取到 " + allResults.size() + " 条结果。");
return allResults;
}
}
Loading…
Cancel
Save