resolution2() 并不是抽象方法,只有当存在二级任务时,用户选择实现
@Override protected SpiderContainer<News> resolution2(String[] htmltxt, SpiderContainer<News> spiderContainer, SpiderResolutionUtil util) { // 遍历入参1中的下载好了的源码, 从新解析出新闻体的新的字段放入容器中的bean集合 for (int i = 0; i < htmltxt.length; i++) { String body = util.getFirstElementValueByClass(htmltxt[i], "wp_articlecontent"); spiderContainer.getBeanList().get(i).setBody(body); } for (News news : spiderContainer.getBeanList()) { System.out.println("Thread.name = "+Thread.currentThread().getName()+news); } // 返回容器 return spiderContainer; }持久化,用户根据自己的需求,选择如何持久化, list中存放的是前面用户解析出来的bean的集合
// persistenceUtil可以持久化图片到本地,前提是bean中仅有一个图片的url字段 public void persistence(List<News> list, PersistenceUtil<News> persistenceUtil) { } }启动:
public static void main(String[] args) { // 创建任务队列, 任意队列都可以,不要求线程安全 LinkedBlockingQueue<String> taskQueue = new LinkedBlockingQueue(); // 假设在准备任务 String url ="http://www.xxx.edu.cn/38/list.htm"; taskQueue.offer(url); for (int i=2;i<50;i++){ String url2 = "http://www.xxx.edu.cn/38/list"+i+".htm"; taskQueue.offer(url2); } SpiderBootStrap spiderBootStrap = new SpiderBootStrap(); spiderBootStrap .initThreadExcutorGroup(10,MyThreadExcutor.class) .setTaskUrlQueue(taskQueue) .build(); } 重要的事情说三遍使用工具方法,需要的 前后缀 是需要从编译器的控制台复制过来的,直接赋值网页上的无效
使用工具方法,需要的 前后缀 是需要从编译器的控制台复制过的,直接赋值网页上的无效
使用工具方法,需要的 前后缀 是需要从编译器的控制台复制过的,直接赋值网页上的无效
笔者水平有限,请大佬批评指教!, 有任何issue请联系笔者, 如果您觉得还不错,欢迎star