开源JAVA爬虫crawler4j源码分析 - 2 开始使用crawler4j

使用crawler4j非常简单,源码中已经包涵了很多的例子,并且是直接就可以运行的。

 

首先运行pom.xml,或者是直接下载依赖库:

https://code.google.com/p/crawler4j/downloads/detail?name=crawler4j-3.5-dependencies.zip&can=2&q=

 

1. 运行Example

打开edu.uci.ics.crawler4j.examples.basic下的BasicCrawlController,就一个main方法,注释掉前3行,改下目录和线程数:

 

/*if (args.length != 2) {
 System.out.println("Needed parameters: ");
System.out.println("\t rootFolder (it will contain intermediate crawl data)");
System.out.println("\t numberOfCralwers (number of concurrent threads)");
return;
}*/
/* * 爬取时数据临时存放目录. */
String crawlStorageFolder = "./tmp";
/* * 爬取线程数,即同时有多少个爬虫工作. */
int numberOfCrawlers = 5;

 

 

保存,运行,程序就开始输出爬取出来的信息了。看,多简单!

 

 

2. 爬取指定网站

翻到BasicCrawlController最后,修改入口URL:

 

/*
 * 添加入口URL
 */

controller.addSeed("http://www.ics.uci.edu/");
controller.addSeed("http://www.ics.uci.edu/~lopes/");
controller.addSeed("http://www.ics.uci.edu/~welling/");

/*
 * 开始工作
 */
controller.start(BasicCrawler.class, numberOfCrawlers);


入口URL即爬虫先从哪些网页开始爬,程序会先将入口页面加入列表,再下载这些页面,然后解析出这些页面里面包涵的链接地址(主要是HTML的a,img,iframe等标签),把这些地址再加入列表,再下载,再解析……

 

 

3. 输出指定信息

打开BasicCrawler,修改visit方法:

 

public void visit(Page page) {
int docid = page.getWebURL().getDocid(); //这是程序定义的ID
String url = page.getWebURL().getURL(); //URL地址
String domain = page.getWebURL().getDomain(); //域名,如baidu.com
String path = page.getWebURL().getPath(); //路径,不包含URL参数
String subDomain = page.getWebURL().getSubDomain(); //子域名,如www,
String parentUrl = page.getWebURL().getParentUrl(); //父页面,即从哪个页面发现的该URL的
String anchor = page.getWebURL().getAnchor(); //锚,即HTML显示的信息,如<a href="***">锚</a>

System.out.println("Docid: " + docid);
System.out.println("URL: " + url);
System.out.println("Domain: '" + domain + "'");
System.out.println("Sub-domain: '" + subDomain + "'");
System.out.println("Path: '" + path + "'");
System.out.println("Parent page: " + parentUrl);
System.out.println("Anchor text: " + anchor);

if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
String text = htmlParseData.getText(); //HTML显示的信息
String html = htmlParseData.getHtml(); //HTML全部代码
List<WebURL> links = htmlParseData.getOutgoingUrls(); //在该页面发现的全部URL地址

System.out.println("Text length: " + text.length());
System.out.println("Html length: " + html.length());
System.out.println("Number of outgoing links: " + links.size());
}

Header[] responseHeaders = page.getFetchResponseHeaders(); //页面服务器返回的HTML头信息
if (responseHeaders != null) {
System.out.println("Response headers:");
for (Header header : responseHeaders) {
System.out.println("\t" + header.getName() + ": " + header.getValue());
}
}

System.out.println("=============");
}

20套Java经典开发实战视频教程

 

4. 爬取指定规则页面

很简单,直接修改BasicCrawler的shouldVisit方法:

 

private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|bmp|gif|jpe?g" + "|png|tiff?|mid|mp2|mp3|mp4"
+ "|wav|avi|mov|mpeg|ram|m4v|pdf" + "|rm|smil|wmv|swf|wma|zip|rar|gz))$");

/**
 * 是否抓取页面
 */
@Override
public boolean shouldVisit(WebURL url) {
String href = url.getURL().toLowerCase();
return !FILTERS.matcher(href).matches() && href.startsWith("http://www.ics.uci.edu/");
}


默认不爬不能解析的格式,如音乐视频,默认只爬URL是http://www.ics.uci.edu开头的,修改方法和正则就可以了。

 

 

5. 爬取指定数量和深度的页面

回到BasicCrawlController,找到下面两行代码,修改就可以了:

 

/*
 * 深度,即从入口URL开始算,URL是第几层。如入口A是1,从A中找到了B,B中又有C,则B是2,C是3
 */
config.setMaxDepthOfCrawling(2);

/*
 * 最多爬取多少个页面
 */
config.setMaxPagesToFetch(1000);

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值