获得cc98板块的htmls

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.httpclient.*;
import org.htmlparser.*;
import org.htmlparser.filters.*;
import org.htmlparser.http.ConnectionManager;
import org.htmlparser.lexer.*;
import org.htmlparser.util.*;

public class get_htmls
{
    public static  void main(String[] args)throws Exception
    {
        get_htmls new_htmls=new get_htmls();
        new_htmls.downloadFileByUrl();
    }
    private String oldfile;
    private String newfile;

    public void  downloadFileByUrl() throws IOException, ParserException
    {
        int boardid=0;
        int page=0;
        String url;
        
        for(int i=2;i<623;i++)                                  // produce root pages
        {
            boardid=i+1;
            url="http://www.cc98.org/list.asp?boardid="+boardid;
            this.catchallseed(url,boardid,page,1);
            System.out.println("http://www.cc98.org/list.asp?boardid="+boardid+"&page="+page);
        }
       
        for(int i=2;i<623;i++)
        {
            boardid=i+1;
            oldfile="F://htmls/compare/98."+boardid+".0.html";
            for(int j=1;j<466;j++)
            {
                page=j+1;
                url="http://www.cc98.org/list.asp?boardid="+boardid+"&page="+page;
                if(this.catchallseed(url,boardid,page,2))
                    break;
                System.out.println("http://www.cc98.org/list.asp?boardid="+boardid+"&page="+page);
            }
        }
        System.out.println("end");
    }
    public  boolean catchallseed(String url,int boardid,int page,int index) throws IOException, ParserException
    {
        HttpClient httpClient = new HttpClient();  
        GetMethod getMethod = new GetMethod(url); 
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
        new DefaultHttpMethodRetryHandler());   
        int statusCode = httpClient.executeMethod(getMethod); 
        if (statusCode != HttpStatus.SC_OK)
        { 
         System.err.println("Method failed: " 
                 + getMethod.getStatusLine()); 
        }  
        byte[] responseBody = getMethod.getResponseBody(); 
        if(index==1)
        {
            FileOutputStream fos_compare=new FileOutputStream("F://htmls/compare/98."+boardid+"."+page+".html");
            fos_compare.write(responseBody);
        }
        else
        {
            FileOutputStream fos=new FileOutputStream("F://htmls/98."+boardid+"."+page+".html"); 
            fos.write(responseBody);
            newfile="F://htmls/98."+boardid+"."+page+".html";
            if(compare_html(oldfile,newfile))
            {
                return true;
            }   
            else
            {
                oldfile=newfile;
                return false;
            }
        }
        return false;
    }


    public static boolean compare_html(String path,String path2) throws ParserException
    {
        ConnectionManager manager;
       
        manager = Page.getConnectionManager();
               
        Parser parser = new Parser(manager.openConnection(path));
        Parser parser1=new Parser(manager.openConnection(path2));
               
        parser1.setEncoding("utf-8");
        parser.setEncoding("utf-8");
               
        NodeFilter filter = new AndFilter(new TagNameFilter("div"),new HasChildFilter(new TagNameFilter("font")));
        NodeList nodelist=parser.parse(filter);
               
        NodeFilter filter1=new AndFilter(new TagNameFilter("div"),new HasChildFilter(new TagNameFilter("font")));
        NodeList nodelist1=parser1.parse(filter1);
        if(nodelist1.toString().isEmpty())
            return true;
        if(nodelist1.toString().equals(nodelist.toString()))
            return true;
        else
            return false;
       
    }
}

相当复杂没有效率的下载网页的静态源码

你可能感兴趣的:(职场,休闲,cc98)