MiseringThread.java 解析页面线程

本文详细解析了MiseringThread类的功能,该类用于解析页面线程,包括从队列中获取待分析的URL,检查页面深度,提取页面内的所有URL,并根据配置的关键字过滤URL,最终将符合条件的URL添加到待访问队列中。

MiseringThread.java 解析页面线程

http://injavawetrust.iteye.com

package com.iteye.injavawetrust.miner;

import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 解析页面线程
 * @author InJavaWeTrust
 *
 */
public class MiseringThread extends Thread  {
	
	private static final Log LOG = LogFactory.getLog(MiseringThread.class);
	
	private MinerConfig config = null;
	
	public MiseringThread(MinerConfig config) {
		this.config = config;
	}
	
	@Override
	public void run() {
		while (!MinerMonitorThread.done) {
			misering();
		}
	}
	
	private synchronized void misering() {
		Html html = MinerQueue.waitingMiseringPoll(); // 等待提取URL的分析页面出队列
		if (null == html || MinerUtil.isBlank(html.getHtml())) {
			return;
		}
		//当前页面深度<爬取深度 取出当前页面全部URL
		if (html.getDepth() < config.getMaxDepth()) {
			LOG.info("MiseringThread获取页面[" + html.getUrl() + "]下所有URL。。。。。。 当前线程 [" + Thread.currentThread().getName() + "]");
			Set<String> urls = MinerUtil.getAllUrl(html.getUrl());
			for(String url : urls){
				if(null == url || url.equals("")){
					continue;
				}
				if(url.substring(url.length() - 1, url.length()).equals("/")){
					url = url.substring(0, url.length() - 1);
				}
				
				MinerUrl minerUrl = new MinerUrl();
				minerUrl.setUrl(url);
				minerUrl.setDepth(html.getDepth() + 1); // 爬取深度+1
				// 判断URL列表是否包含关键字
				if(!MinerUtil.checkKeys(url, config.getKeys())){
					continue;
				}
				// 添加到待访问队列,每个URL只访问一次
				MinerQueue.addUnVisited(minerUrl);
				// 将页面URL 添加到URL队列 保证每个URL只访问一次
				MinerQueue.addUrlSet(minerUrl.getUrl()); 
			}
		}
	}
	
}

 

返回列表

 

转载于:https://www.cnblogs.com/new0801/p/6146681.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值