日期:2014-05-17  浏览次数:20648 次

jeecms 采集功能优化,基于htmlparser实现
说明:此次优化基于htmlparser,根据标签名称或者标签属性及属性值 过滤内容,只需要设置,内容地址集及内容参数即可采集,准确率高。 
用法:
在“开始HTML”处(没有修改模板,其实现在应该叫“内容区域参数”)写上你要采集的标签名称/标签属性及属性值,如  id=artibody 
            在“结束HTML”处(没有修改模板,其实现在应该叫“内容区域过滤参数”)写上在内容区域内你要过滤的标签名称/标签属性及属性     值,如:type=text/javascript,class=icon_fx|blkComment otherContent_01 
约定:不同标签/属性以逗号(“,”)分隔,相同属性不同值,值与值之间以"|"分隔 
           1,标签属性/值形式,如:class=articleList|tips,id=fxwb|fxMSN|fxMSN 
            2,标签名称形式,如:div,p,span 
            3,混合形式,如:class=articleList|tips,id=fxwb|fxMSN|fxMSN,div,p,span 

采集参数样例: 
新浪国内新闻: 
内容地址集:  开始HTML: class=list_009     结束HTML :空 
内容: 开始HTML: id=artibody       结束HTML :type=text/javascript,class=icon_fx|blkComment otherContent_01,style=text-align: right;padding-right:10px;|margin-top:6px;|font-size: 12px ! important;|font-size:12px,id=fxwb|fxMSN|fxMSN|comment_t_show_top,style,script 

代码如下: 

HTML解析工具类接口:
package com.jeecms.cms.service;

import java.util.List;

import com.jeecms.cms.entity.assist.CmsAcquisition;
/**
* HTML解析工具类接口
* @author javacoo
* @since 2011-10-31
*/
public interface ParseHtmlTool {
/**
* 取得连接集合
* @param orginHtml 原始HTML
* @return 连接集合
*/
List<String> getUrlList( String orginHtml);
/**
* 取得标题集合
* @param orginHtml 原始HTML
* @return 标题集合
*/
List<String> getTitleList(String orginHtml);
    /**
     * 取得指定区域的HTML内容
     * @return 指定区域的HTML内容
     */
String getHtml(String orginHtml);
}
HTML解析工具,HtmlParser实现类:
package com.jeecms.cms.service;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.nodes.RemarkNode;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

import com.jeecms.cms.entity.assist.CmsAcquisition;
/**
* HTML解析工具,HtmlParser实现类
* @author javacoo
* @since 2011-10-31
*/
public class HtmlParserImpl implements ParseHtmlTool{
/**连接集合标志*/
    private static String LINK_LIST = "linkList";
    /**标题集合标志*/
private static String TITLE_LIST = "titleList";
/**单标签标志*/
private static String SINGLE_TAG = "singleTag";
/**连接正则表达式*/
private static String LINK_REGX = "<a.*href=\"(.*?)\".*>(.*?)</a>";
/**正则表达式对象*/
private Pattern pt = Pattern.compile(LINK_REGX);
/**采集参数bean*/
private ParamBean paramBean;

       public HtmlParserImpl(CmsAcquisition acqu){
parseRequestParam(acqu);
}

/**
* 取得标题集合
* @param orginHtml 原始HTML
* @return 标题集合
*/
public List<String> ge