git地址:https://github.com/CrawlScript/WebCollector

业务需要爬取一个网站所有手机信息 ,最开始用了crawler4j这个框架,挺简单的,但是发现不能满足我的需求;只支持单页面信息抓取,但是我是要多页面抓取;需要在一级页面抓取到所有的二级页面的链接,再加入所有二级页面的链接,进行抓取所有三级页面的信息;后来改成了webcontroller,发现可以实现我的需求:

爬虫原理就是抓取到页面(page)的所有信息,输出为一个html,然后用jsoup去解析这个html,根据id、class等定位到对应的页面元素,然后进行取值。

注意事项:这个框架有个回滚机制,如果在添加一条数据的时候,里面有一个地方报异常的,这一整条数据都不会添加,所以为了数据全量,一定要先把控制台输出的代码异常全部解决!

一般情况是 Elements 为空缺去取数据导致报异常,一般是判断  elements != null && elements .size()>0

上代码:(www.***.cn改成自己要抓取的网址

import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
import cn.edu.hfut.dmic.webcollector.model.Page;
import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.util.ArrayList;
import java.util.List;/*** Crawling news from github news** @author hu*/
public class DemoAutoNewsCrawler extends BreadthCrawler {static int grade = 1;//爬虫的深度,第一次为1static List<String> list = new ArrayList<String>();//url种子/*** @param crawlPath crawlPath is the path of the directory which maintains*                  information of this crawler* @param autoParse if autoParse is true,BreadthCrawler will auto extract*                  links which match regex rules from pag*/public DemoAutoNewsCrawler(String crawlPath, boolean autoParse) {super(crawlPath, autoParse);/*start pages*/this.addSeed("http://www.***.cn/cell_phone_index/subcate57_list_1.html");//循环添加所有链接
//        for(int pageIndex = 1; pageIndex <= 1; pageIndex++) {
//            String seedUrl = String.format("https://list.jd.com/list.html?cat=9987,653,655&page=1&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main", pageIndex);
//            this.addSeed(seedUrl);
//        }setThreads(1);getConf().setTopN(100);}public void visit(Page page, CrawlDatums next) {String url = page.url();/*if page is news page*/if (page.matchUrl("http://www.***.cn/.*")) { // .*代表后面匹配所有Document doc =  page.doc();//爬虫的深度为1if(grade == 1){Element element = doc.getElementById("J_PicMode");Elements elements = element.getAllElements();for (Element el: elements) {Elements e = el.getElementsByClass("pic");for (Element e1: e) {String s = el.children().attr("href");if(s != null && !"".equals(s)){list.add(el.children().attr("href"));//加入第二级链接}System.out.println(el.children().attr("href"));}}}//爬虫的深度为2else if(grade == 2){Elements e = doc.getElementsByClass("_j_MP_more section-more");for (Element e1: e) {String s = e.attr("href");if(s != null && !"".equals(s)){list.add(e.attr("href"));//加入第三级链接}}}else if(grade == 3){Elements e1 = doc.getElementsByClass("product-model__name");for (Element e: e1) {System.out.println("手机型号:" + e1.text());}if (doc.select("#newPmVal_0") != null) {System.out.println("上市日期:" + doc.select("#newPmVal_0").get(0).text());}}}}public static void main(String[] args) throws Exception {DemoAutoNewsCrawler crawler = new DemoAutoNewsCrawler("crawl", true);/*start crawl with depth of 4*/crawler.start(4);System.out.println("爬虫深度:" + grade);System.out.println("种子大小:"+list.size());System.out.println("第一次执行完毕===============================");//提升深度grade++;for(int pageIndex = 1; pageIndex <= 2; pageIndex++) {System.out.println("加入的子链接:" + list.get(pageIndex-1));String seedUrl = String.format("http://www.***.cn"+list.get(pageIndex-1), pageIndex);crawler.addSeed(seedUrl);}//子链接加入完毕之后清空listlist.clear();//第二次执行crawler.start(4);System.out.println("爬虫深度:" + grade);System.out.println("种子大小:"+list.size());System.out.println("第二次执行完毕===============================");//提升深度grade++;for(int pageIndex = 1; pageIndex <= 2; pageIndex++) {System.out.println("加入的子链接:" + list.get(pageIndex-1));String seedUrl = String.format("http://www.***.cn"+list.get(pageIndex-1), pageIndex);crawler.addSeed(seedUrl);}//第三次执行crawler.start(4);System.out.println("爬虫深度:" + grade);System.out.println("种子大小:"+list.size());System.out.println("第三次执行完毕===============================");}}

使用的maven,pom.xml依赖:

<dependencies><dependency><groupId>cn.edu.hfut.dmic.webcollector</groupId><artifactId>WebCollector</artifactId><version>2.73-alpha</version></dependency><dependency><groupId>org.jsoup</groupId>  <!-- jsoup用于解析html用的 --><artifactId>jsoup</artifactId><version>1.11.3</version></dependency>
</dependencies>

注意事项:

页面上有些元素是 <a class="a b"> class中间是用空格隔开的,如果我们要取它们,则需要:

doc.select(".a.b") 或者doc.select(".a .b")中间也用空格,才能取到!

java爬虫框架Webcontroller相关推荐

  1. java爬虫框架之webMagic

    webMagic框架 前言 介绍 案例 控制类: 解析类: 持久化类: 用到的工具类以及配置类: 注意事项 后语 前言 文章仅供安全领域的朋友学习使用!! 严禁做违法违纪的事情,责任自负 介绍 Web ...

  2. java爬虫框架哪个好_java爬虫框架的使用

    原标题:java爬虫框架的使用 随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,但是自始至终,java语言一直是被使用范围最广的编程语言.今天,武汉中软国际主要给大家讲解的是java语言中的 ...

  3. 什么是爬虫,常见的java爬虫框架有哪些?-蛙课网

    随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,与此同时,java语言是使用范围最广的编程语言.今天我们一起了解一下什么是爬虫,java爬虫框架有哪些. 网络爬虫(又称为网页蜘蛛,网络机器人 ...

  4. java 爬虫框架 j_一个分布式java爬虫框架JLiteSpider

    A lite distributed Java spider framework. 这是一个轻量级的分布式java爬虫框架 特点 这是一个强大,但又轻量级的分布式爬虫框架.jlitespider天生具 ...

  5. Java爬虫框架wemgic_Java爬虫框架-WebMagic挖坑补坑指南

    以前总是用的Python下的Scrapy和crawley和PHP的小众爬虫框架,最近突然想到了何不用下Java下的框架试试? 查了下Java下的爬虫框架自然也不在少数,Nutch,WebMagic,W ...

  6. JAVA 爬虫框架webmagic 初步使用Demo

    一想到做爬虫大家第一个想到的语言一定是python,毕竟python比方便,而且最近也非常的火爆,但是python有一个全局锁的概念新能有瓶颈,所以用java还是比较牛逼的, webmagic 官网 ...

  7. java爬虫框架jsoup

    1.java爬虫框架的api jsoup:https://www.open-open.com/jsoup/ 转载于:https://www.cnblogs.com/wuzaipei/p/1057266 ...

  8. java爬虫框架—WebMagic

    什么是网络爬虫 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分.爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满 ...

  9. Java爬虫框架之WebMagic的学习总结

    Java爬虫框架之WebMagic WebMagic 概述 特性 架构 四大组件 数据流转对象 控制爬虫运转的引擎Spider WebMagic的基本使用 添加WebMagic的核心与扩展依赖 爬虫实 ...

最新文章

  1. 2020-1024=996
  2. Java VS .NET:Java与.NET的特点对比
  3. Django+xadmin打造在线教育平台(十)
  4. java中多个输入框搜索_如何在一个搜索框中输入多个字段的值进行查询?
  5. [react] 请说说什么是useEffect?
  6. 技术系统进化法则包括_技术系统进化论,模式五、技术集成以增加系统功能
  7. orm mysql_PHP基于ORM方式操作MySQL数据库实例
  8. 2013下半年(11月)信息系统项目管理师考试题型分析(综合知识、案例分析、论文)...
  9. 【超直白】三分钟创建一个小程序
  10. Sql Update Alter Rename
  11. HDOJ---3790 最短路径问题[Dijkstra算法||SPFA]
  12. mysqlbinlog: unknown variable 'default-character-s
  13. 【BZOJ4818】序列计数(动态规划,生成函数)
  14. RFC791:INTERNET PROTOCOL网络协议
  15. 谷歌浏览器安装插件的方法
  16. 计算机科学与技术哪些专业课,计算机科学与技术专业课程有哪些 计算机科学与技术有哪些科目...
  17. nssa和stub_OSPF里几个特殊区域(stub、Totally stubby、NSSA、Totally NSSA)总结
  18. AndroidQ适配之存储权限的变更
  19. 原生html单页应用,web单页应用
  20. pytorch搭建深度学习网络

热门文章

  1. python3爬虫—实现简单获取贴吧信息
  2. Linux桥mac地址表(Hash表)结构
  3. 图解 gma 气候标准化指数运算过程的数组变化流程:以 SPI 为例
  4. 高质量WordPress下载站模板5play主题
  5. 火车头采集器免登录采集数据发布到DEDECMS织梦的方法
  6. 负的几次方怎么使用计算机,负五次方如何用电脑输入
  7. Python随堂笔记 常用模块和第三方库
  8. iPhone 隐藏底部 “Dock栏 ”教程
  9. java form的时间格式_java date日期格式
  10. html是什么意思 htm与html的有什么不同