这个类演示了crawler4j如何爬取一个网页的数据 以及抽取出标题和文本信息
代码有详细注释:
package com.java1234.collectingData;
import org.apache.http.HttpStatus;
import edu.uci.ics.crawler4j.crawler.CrawlConfig;
import edu.uci.ics.crawler4j.crawler.Page;
import edu.uci.ics.crawler4j.fetcher.PageFetchResult;
import edu.uci.ics.crawler4j.fetcher.PageFetcher;
import edu.uci.ics.crawler4j.parser.HtmlParseData;
import edu.uci.ics.crawler4j.parser.ParseData;
import edu.uci.ics.crawler4j.parser.Parser;
import edu.uci.ics.crawler4j.url.WebURL;
/**
* 这个类演示了crawler4j如何爬取一个网页的数据
* 以及抽取出标题和文本信息
*/
public class Downloader {
private final Parser parser;
private final PageFetcher pageFetcher;
public Downloader() {
CrawlConfig config = new CrawlConfig(); // 实例化爬虫配置
parser = new Parser(config); // 实例化解析器
pageFetcher = new PageFetcher(config); // 实例化页面获取器
}
public static void main(String[] args) {
Downloader downloader = new Downloader();
downloader.processUrl("http://www.java1234.com/a/yuanchuang/j2sev2/2016/0606/6221.html");
downloader.processUrl("http://blog.java1234.com/blog/articles/103.html");
}
public void processUrl(String url) {
System.out.println("处理url:"+url);
Page page = download(url);
if (page != null) {
ParseData parseData = page.getParseData(); // 获取解析数据
if (parseData != null) {
if (parseData instanceof HtmlParseData) { // 假如是html数据类型
HtmlParseData htmlParseData = (HtmlParseData) parseData; // 获取数据
System.out.println("标题: " + htmlParseData.getTitle());
System.out.println("纯文本长度: " + htmlParseData.getText().length());
System.out.println("html长度: " + htmlParseData.getHtml().length());
}
} else {
System.out.println("不能解析该页面");
}
} else {
System.out.println("不能获取页面的内容");
}
}
/**
* 下载指定Url的页面内容
* @param url
* @return
*/
private Page download(String url) {
WebURL curURL = new WebURL(); // 实例化weburl
curURL.setURL(url); // 设置url
PageFetchResult fetchResult = null;
try {
fetchResult = pageFetcher.fetchPage(curURL); // 获取爬取结果
if (fetchResult.getStatusCode() == HttpStatus.SC_OK) { // 判断http状态是否是200
Page page = new Page(curURL); // 封装Page
fetchResult.fetchContent(page); // 设置内容
parser.parse(page, curURL.getURL()); // 解析page
return page; // 返回page
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fetchResult != null) { // 假如jvm没有回收 用代码回收对象 防止内存溢出
fetchResult.discardContentIfNotConsumed(); // 销毁获取内容
}
}
return null;
}
}运行结果:
处理url:http://www.java1234.com/a/yuanchuang/j2sev2/2016/0606/6221.html 标题: 【一头扎进J2SE】视频教程V2.0第五讲_Java知识分享网-免费Java资源下载 纯文本长度: 3078 html长度: 32052 处理url:http://blog.java1234.com/blog/articles/103.html 标题: Crawler4j的使用_Java开源博客系统-Powered by java1234 纯文本长度: 4987 html长度: 21926