下面我们来写一个Demo,让大家快速入门crawler4j;代码中加了详细的备注,大家可以好好看看。

crawler4j中用了slf4j来记录项目运行日志信息。我们使用slf4j具体实现类log4j;

首先我们在pom.xml中加入log4j以及log4j驱动类支持;

log4j

log4j

1.2.17

org.slf4j

slf4j-log4j12

1.7.21

log4j.properties配置如下:log4j.rootLogger = debug,D,E

### debug ###

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File = c://logs/log.log

log4j.appender.D.Append = true

log4j.appender.D.Threshold = DEBUG

log4j.appender.D.layout = org.apache.log4j.PatternLayout

log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### error ###

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File =c://logs/error.log

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]

然后我们先来定义一个MyCrawlerpackage com.java1234.crawler;

import java.util.Set;

import java.util.regex.Pattern;

import edu.uci.ics.crawler4j.crawler.Page;

import edu.uci.ics.crawler4j.crawler.WebCrawler;

import edu.uci.ics.crawler4j.parser.HtmlParseData;

import edu.uci.ics.crawler4j.url.WebURL;

/**

* 自定义爬虫类需要继承WebCrawler类,决定哪些url可以被爬以及处理爬取的页面信息

* @author

*

*/

public class MyCrawler extends WebCrawler {

/**

* 正则匹配指定的后缀文件

*/

private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|gif|jpg"

+ "|png|mp3|mp3|zip|gz))$");

/**

* 这个方法主要是决定哪些url我们需要抓取,返回true表示是我们需要的,返回false表示不是我们需要的Url

* 第一个参数referringPage封装了当前爬取的页面信息

* 第二个参数url封装了当前爬取的页面url信息

*/

@Override

public boolean shouldVisit(Page referringPage, WebURL url) {

String href = url.getURL().toLowerCase();  // 得到小写的url

return !FILTERS.matcher(href).matches()   // 正则匹配,过滤掉我们不需要的后缀文件

&& href.startsWith("http://www.java1234.com/");  // url必须是http://www.java1234.com/开头,规定站点

}

/**

* 当我们爬到我们需要的页面,这个方法会被调用,我们可以尽情的处理这个页面

* page参数封装了所有页面信息

*/

@Override

public void visit(Page page) {

String url = page.getWebURL().getURL();  // 获取url

System.out.println("URL: " + url);

if (page.getParseData() instanceof HtmlParseData) {  // 判断是否是html数据

HtmlParseData htmlParseData = (HtmlParseData) page.getParseData(); // 强制类型转换,获取html数据对象

String text = htmlParseData.getText();  // 获取页面纯文本(无html标签)

String html = htmlParseData.getHtml();  // 获取页面Html

Set links = htmlParseData.getOutgoingUrls();  // 获取页面输出链接

System.out.println("纯文本长度: " + text.length());

System.out.println("html长度: " + html.length());

System.out.println("输出链接个数: " + links.size());

}

}

}

再写一个控制器Controller:package com.java1234.crawler;

import edu.uci.ics.crawler4j.crawler.CrawlConfig;

import edu.uci.ics.crawler4j.crawler.CrawlController;

import edu.uci.ics.crawler4j.fetcher.PageFetcher;

import edu.uci.ics.crawler4j.robotstxt.RobotstxtConfig;

import edu.uci.ics.crawler4j.robotstxt.RobotstxtServer;

/**

* 爬虫控制器

* @author

*

*/

public class Controller {

public static void main(String[] args) throws Exception {

String crawlStorageFolder = "c:/crawl"; // 定义爬虫数据存储位置

int numberOfCrawlers = 7; // 定义7个爬虫,也就是7个线程

CrawlConfig config = new CrawlConfig(); // 定义爬虫配置

config.setCrawlStorageFolder(crawlStorageFolder); // 设置爬虫文件存储位置

/*

* 实例化爬虫控制器

*/

PageFetcher pageFetcher = new PageFetcher(config); // 实例化页面获取器

RobotstxtConfig robotstxtConfig = new RobotstxtConfig(); // 实例化爬虫机器人配置 比如可以设置 user-agent

// 实例化爬虫机器人对目标服务器的配置,每个网站都有一个robots.txt文件 规定了该网站哪些页面可以爬,哪些页面禁止爬,该类是对robots.txt规范的实现

RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);

// 实例化爬虫控制器

CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);

/**

* 配置爬虫种子页面,就是规定的从哪里开始爬,可以配置多个种子页面

*/

controller.addSeed("http://www.java1234.com/");

controller.addSeed("http://www.java1234.com/a/kaiyuan/");

controller.addSeed("http://www.java1234.com/a/bysj/");

/**

* 启动爬虫,爬虫从此刻开始执行爬虫任务,根据以上配置

*/

controller.start(MyCrawler.class, numberOfCrawlers);

}

}

我们运行Controller,效果如下:

这个是一个很简单的实例,大家可以根据我的注释,以及配合框架源码,好好理解下;

crawler爬虫java实例,Crawler4j快速入门实例相关推荐

  1. WebService 理论详解、JWS(Java Web Service) 快速入门

    目录 WebService (web服务)概述 WebService 平台技术 WebService 工作原理 WebService 开发流程 常见 Web Service 框架 JWS(Java W ...

  2. python爬虫实践——零基础快速入门(四)爬取小猪租房信息

    上篇文章我们讲到python爬虫实践--零基础快速入门(三)爬取豆瓣电影 接下来我们爬取小猪短租租房信息.进入主页后选择深圳地区的位置.地址如下: http://sz.xiaozhu.com/ 一,标 ...

  3. 爬虫框架:Scrapy 快速入门

    文章目录 一.Scrapy简介 1.1 示例代码 1.2 示例代码的运行流程 二.安装Scrapy 2.1 Ubuntu下安装 2.2 Windows下安装 2.3 Mac OS下安装 三.Scrap ...

  4. Java 高级 --- 多线程快速入门

    这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书 多线程快速入门 1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组 ...

  5. Java学习的快速入门:10行代码学JQuery

    生活在快速发展时代的我们,如果不提速可能稍不留神就被时代淘汰了.快节奏的时代成就了快餐,亦成就了速成教育.尤其是身处互联网行业的我们,更新换代的速度更是迅速,快速掌握一门技术已经成为潮流趋势.怎样才能 ...

  6. 一、Java Web——JDBC快速入门(详解)

    今日内容 1. JDBC基本概念 2. 快速入门 3. 对JDBC中各个接口和类详解 JDBC: 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数 ...

  7. java安卓开发 快速入门_安卓程序员如何快速入门后端开发常识

    首先,对于安卓开发人员来说,学习一下后端开发知识是有必要的,一方面可以拓展自身的知识面,另一方面也可以推动自己走向全栈程序员发展路线,在云计算时代,全栈程序员的发展空间会更大一些. 相对来说,安卓程序 ...

  8. 【数据分析】【数据获取】【Python爬虫】快速入门+实例+代码+GIF实操

    一:爬虫认知 爬虫名称由来于蜘蛛结网,蜘蛛在一个一个的蛛网节点中等待猎物的到来.而我们的爬虫也是从网页页面的HTML资源中取出我们要的节点资源.二者过程相似,因此爬虫称之为Spider. 1.1 爬虫 ...

  9. crawler爬虫java实例_crawler-java

    软件简介 一个简约灵活强大的Java爬虫框架. Features: 1.代码简单易懂,可定制性强 2.简单且易于使用的api 3.支持文件下载.分块抓取 4.请求和相应支持的内容和选项比较丰富.每个请 ...

最新文章

  1. idea配置echache.xml报错Cannot resolve file 'ehcache.xsd'
  2. 华为SDSec分为几层
  3. java inputstream类_Java高级[7]:DataInputStream相关类的使用
  4. KMP--字符串匹配
  5. 在Tomcat中配配置数据源汇总
  6. [转帖]漫画趣解Linux内核
  7. 【记录】JS回调函数(小例子)
  8. Cadence Allegro 差分走线单根走的方法图文教程
  9. adb连接手机全过程(以oppo手机为例)(解决adb devices 找不到设备)
  10. 新电脑的计算机怎么在桌面显示,新电脑我的电脑在哪_新电脑我的电脑在哪里查看-系统城...
  11. 好用的三维绘图软件CREO绘制椭圆
  12. 16讲项目实战详细页制作及与首页和内页的链接添加
  13. ibmx3100M5服务器装win7系统,详细教程:如何安装win7系统?
  14. UWB定位系统在展馆中的应用
  15. Mac 安装第三方来源软件
  16. 【精益生产】精益知识大全
  17. 学计算机的男生生好不好找女朋友,我是计算机的大2学生,我们班上女生极少,我很想找女朋友,请问怎么? 爱问知识人...
  18. 【三维人脸识别】matlab读取.wrl三维图像文件
  19. 封神台SQL注入-延时注入
  20. ZZULIOJ1015

热门文章

  1. 全能cad编辑器你用过吗?
  2. NVIDIA-SMI报错:Unable to determine the device handle for GPU 0000:XX:00.0: Unknown Error
  3. 对Android和iOS项目中的模块结构和类结构设计的探讨
  4. 电商购物车设计(附案例学习)
  5. AfterEffect插件-常规功能开发-复制组合图层-js脚本开发-AE插件
  6. MyBatis基础语法
  7. js的鼠标经过与离开事件
  8. Quartz原理解密
  9. 典型的软件过程几种模型
  10. 第二篇 作战篇:抢“借”攻坚,借鸡生蛋