crawler爬虫java实例,Crawler4j快速入门实例
下面我们来写一个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快速入门实例相关推荐
- WebService 理论详解、JWS(Java Web Service) 快速入门
目录 WebService (web服务)概述 WebService 平台技术 WebService 工作原理 WebService 开发流程 常见 Web Service 框架 JWS(Java W ...
- python爬虫实践——零基础快速入门(四)爬取小猪租房信息
上篇文章我们讲到python爬虫实践--零基础快速入门(三)爬取豆瓣电影 接下来我们爬取小猪短租租房信息.进入主页后选择深圳地区的位置.地址如下: http://sz.xiaozhu.com/ 一,标 ...
- 爬虫框架:Scrapy 快速入门
文章目录 一.Scrapy简介 1.1 示例代码 1.2 示例代码的运行流程 二.安装Scrapy 2.1 Ubuntu下安装 2.2 Windows下安装 2.3 Mac OS下安装 三.Scrap ...
- Java 高级 --- 多线程快速入门
这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书 多线程快速入门 1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组 ...
- Java学习的快速入门:10行代码学JQuery
生活在快速发展时代的我们,如果不提速可能稍不留神就被时代淘汰了.快节奏的时代成就了快餐,亦成就了速成教育.尤其是身处互联网行业的我们,更新换代的速度更是迅速,快速掌握一门技术已经成为潮流趋势.怎样才能 ...
- 一、Java Web——JDBC快速入门(详解)
今日内容 1. JDBC基本概念 2. 快速入门 3. 对JDBC中各个接口和类详解 JDBC: 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数 ...
- java安卓开发 快速入门_安卓程序员如何快速入门后端开发常识
首先,对于安卓开发人员来说,学习一下后端开发知识是有必要的,一方面可以拓展自身的知识面,另一方面也可以推动自己走向全栈程序员发展路线,在云计算时代,全栈程序员的发展空间会更大一些. 相对来说,安卓程序 ...
- 【数据分析】【数据获取】【Python爬虫】快速入门+实例+代码+GIF实操
一:爬虫认知 爬虫名称由来于蜘蛛结网,蜘蛛在一个一个的蛛网节点中等待猎物的到来.而我们的爬虫也是从网页页面的HTML资源中取出我们要的节点资源.二者过程相似,因此爬虫称之为Spider. 1.1 爬虫 ...
- crawler爬虫java实例_crawler-java
软件简介 一个简约灵活强大的Java爬虫框架. Features: 1.代码简单易懂,可定制性强 2.简单且易于使用的api 3.支持文件下载.分块抓取 4.请求和相应支持的内容和选项比较丰富.每个请 ...
最新文章
- idea配置echache.xml报错Cannot resolve file 'ehcache.xsd'
- 华为SDSec分为几层
- java inputstream类_Java高级[7]:DataInputStream相关类的使用
- KMP--字符串匹配
- 在Tomcat中配配置数据源汇总
- [转帖]漫画趣解Linux内核
- 【记录】JS回调函数(小例子)
- Cadence Allegro 差分走线单根走的方法图文教程
- adb连接手机全过程(以oppo手机为例)(解决adb devices 找不到设备)
- 新电脑的计算机怎么在桌面显示,新电脑我的电脑在哪_新电脑我的电脑在哪里查看-系统城...
- 好用的三维绘图软件CREO绘制椭圆
- 16讲项目实战详细页制作及与首页和内页的链接添加
- ibmx3100M5服务器装win7系统,详细教程:如何安装win7系统?
- UWB定位系统在展馆中的应用
- Mac 安装第三方来源软件
- 【精益生产】精益知识大全
- 学计算机的男生生好不好找女朋友,我是计算机的大2学生,我们班上女生极少,我很想找女朋友,请问怎么? 爱问知识人...
- 【三维人脸识别】matlab读取.wrl三维图像文件
- 封神台SQL注入-延时注入
- ZZULIOJ1015