java 提取 html 摘要信息

来源:互联网 发布:python findall函数 编辑:程序博客网 时间:2024/06/05 15:43

import java.io.IOException;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.PrototypicalNodeFactory;
import org.htmlparser.tags.CompositeTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;


public class test {

    /**
     * @param args
     * @throws ParserException
     * @throws IOException
     */
    public static void main(String[] args) throws ParserException, IOException {
        String content = "<div id=/"Cnt-Main-Article-QQ/"><p align=/"center/"><img alt=/"甘肃南部舟曲县今晨突发特大泥石流灾害/" src=/"http://img1.gtimg.com/news/pics/hv1/107/108/594/38652497.jpg/" /></p>//n<p style=/"font-size:10pt;font-family:宋体;/" align=/"center/">甘肃舟曲县今晨突发特大泥石流灾害,车辆冲入水中</p>//n<p style=/"text-indent:2em;/">8//n月7日22时许,甘南州舟曲县突降强降雨,县城北面的罗家峪、三眼峪泥石流下泄,由北向南冲向县城,造成沿河房屋被冲毁,泥石流阻断白龙江、形成堰塞湖。//n据初步调查,截至8月8日11时,舟曲县特大洪灾造成县城由北向南5公里长、500 米宽区域被夷为平地(约250万平米),受灾人数约2万人,遇难80多//n人,受伤70多人,失踪人数正在统计当中。目前,县城洪水水位较早晨6时下降 40公分,但由于白龙江上游迭部段早晨突降暴雨,白龙江洪峰到达舟曲后,水位//n仍有升高趋势。</p>//n<p style=/"text-indent:2em;/">目前,省委书记、省人大常委会主任陆浩,省委副书记、代省长刘伟平,副省长、省抗旱防汛指挥部总指挥泽巴足已分别带领有关部门负责人赶到灾区现场,正在指导开展抗洪救灾工作。同时,省政府已启动了I级防汛抗洪应急响应和自然灾害救助Il级响应,全力开展抗洪抢险救灾工作。</p>//n<p style=/"text-indent:2em;/">经省委、省政府商请,省军区报请兰州军区调动的驻临洮某部600名官兵、驻宁夏中卫某部700 名官兵,解放军第一医院、解放军临夏第七医院两个医疗队已出发赶赴灾区。8日6时30分,2架直升机载爆破专家紧急飞往灾区;兰州军区某部2000名官兵正在赶赴灾区途中。</p>//n<p style=/"text-indent:2em;/">按//n照省委、省政府主要领导的要求,省国土资源厅由一名副厅长带队的地质灾害应急调查队已于 4时35分赶赴现场。省卫生厅组建的由省人民医院19名医护人员组//n成的医疗队,省疾病预防控制中心4名防疫人员组成的防疫队,省卫生厅卫生监督所6名卫生监督人员组成的卫生监督队,携带药品和设备,由省卫生厅厅长带队已//n于8时30分赶赴灾区。甘南州卫生局已于4时30分派遣由45人组成的医疗队赶赴受灾现场。省交通厅已调集甘南公路总段、陇南公路总段和参与陇南灾后重建//n的交通队伍和武警交通六支队紧急赶赴受灾路段,其中携带大型机械的甘南公路总段和武警交通六支队最早投入到抢通工作中。测绘、电力、通信等部门也分别组织//n专业人员、携带必要的装备连夜赶赴灾区抢险救灾。省民政厅已紧急向灾区调拨1800顶帐篷、2万箱方便面、2万箱矿泉水等救灾物资。同时,为确保白龙江陇//n南段沿岸人民群众生命安全,陇南市政府正在组织人员,转移沿岸居住群众。</p>//n<p style=/"text-indent:2em;/">接到胡锦涛总书记、温家宝总理的批示后,省委、省政府迅速进行了传达,并按照批示精神,正在调动一切力量,全力以赴开展抗洪抢险救灾工作。来源:甘肃省政府网站</p>//n</div>//n <div style=/"left:5px;top:502px;width:671px;height:2px;/" class=/"firebugHighlight/"></div>//n<div style=/"left:676px;top:502px;width:2px;height:148px;/" class=/"firebugHighlight/"></div>//n<div style=/"left:5px;top:648px;width:671px;height:2px;/" class=/"firebugHighlight/"></div>//n<div style=/"left:3px;top:502px;width:2px;height:148px;/" class=/"firebugHighlight/"></div>";
        String html = readByMaxLen(content,100);
        Parser parser = Parser.createParser(new String(html.getBytes(),"8859_1"),"");
        PrototypicalNodeFactory factory = new PrototypicalNodeFactory ();
        parser.setNodeFactory(factory);
        NodeList nodelist = parser.extractAllNodesThatMatch(new NodeFilter(){
            public boolean accept(Node node)
            {
                if(node instanceof CompositeTag)
                    return true;
                return false;
            }
        });
       
        String str = "";
        String tmp = "";
        for (int i = 0; i < nodelist.size(); i++)    {
            CompositeTag testTag = (CompositeTag)nodelist.elementAt(i);       
            if (testTag.getParent() == null) {
                tmp = new String(testTag.toHtml().getBytes("8859_1"));
                str += tmp + "/n";
            }
        }
       
        System.out.println(str);
    }

    public static String readByMaxLen(String content,int length) throws IOException {       
        int pos = 0,len = 0,count = 0;
        String s = "";
        StringBuffer sb = new StringBuffer();
        while(true)
        {
            if(count >= length)
                break;
             s = content.substring(pos, pos+1);
             if(s.equals("<"))
             {
                 len = content.indexOf(">", pos)-pos;
                 for(int i=0;i<len;i++)
                 {
                     s = content.substring(pos+i, pos+i+1);
                     sb.append(s);
                 }
                 pos += len;
             }
             else
             {
                 if(count < length)
                 {
                      if(s.equals(">"))
                        {
                            sb.append(s);
                            pos++;
                        }
                        else{
                     sb.append(s);
                     count++;
                     pos++;
                        }
                 }
             }
        }
       
        return sb.toString();
    }
}

原创粉丝点击