package xyz.anduo.crawler;
import java.util.Set;
public class Crawler {
//用于主题爬虫
private ComputeUrl computeUrl = null;
public Crawler() {
computeUrl = new PageRankComputeUrl();
}
/**
* 使用种子初始化抓取队列
*
* @param seeds
*/
private void initCrawlerWithSeeds(String[] seeds) {
for (int i = 0; i < seeds.length; i++) {
LinkQueue.addUnVisitedUrl(seeds[i]);
}
}
public void crawling(String[] seeds) {
// 初始化url队列
initCrawlerWithSeeds(seeds);
// 循环条件:待抓取的连接不空且抓取的网页不多于1000
while (!LinkQueue.unVisitedUrlIsEmpty() && LinkQueue.getVisitedUrlNum() <= 1000) {
LinkFilter filter = new LinkFilter() {
public boolean accept(String url) {
if (url.startsWith("http://blog.sina.com.cn")) {
return true;
} else {
return false;
}
}
};
// 对头url出队
String visitUrl = (String) LinkQueue.unVisitedUrlDeQueue();
if (visitUrl == null) {
continue;
}
DownLoadFile downLoader = new DownLoadFile();
// 下载网页
String content = downLoader.downloadFile(visitUrl);
if (computeUrl.accept(visitUrl, content)) {
continue;
}
// 该url放入已访问的url中
LinkQueue.addVisitedUrl(visitUrl);
// 提取出下载网页中的url
Set<String> links = HtmlParserTool.extracLinks(visitUrl, filter);
// 新的未访问的url入队
for (String url : links) {
LinkQueue.addUnVisitedUrl(url);
}
}
}
}