JAVA抓取网站网页内容

最近在用JAVA研究下爬网技术,呵呵,入了个门,把自己的心得和大家分享下 
以下提供二种方法,一种是用apache提供的包.另一种是用JAVA自带的.
代码如下: 
 
 
// 第一种方法 
//这种方法是用apache提供的包,简单方便 
//但是要用到以下包:commons-codec-1.4.jar 
//    commons-httpclient-3.1.jar 
//    commons-logging-1.0.4.jar 
 
 
    public static String createhttpClient(String url, String param) { 
        HttpClient client = new HttpClient(); 
        String response = null; 
        String keyword = null; 
        PostMethod postMethod = new PostMethod(url); 
 
    
//        try { 
//            if (param != null) 
//                keyword = new String(param.getBytes("gb2312"), "ISO-8859-1"); 
//        } catch (UnsupportedEncodingException e1) { 
//            // TODO Auto-generated catch block 
//            e1.printStackTrace(); 
//        } 
 
        // NameValuePair[] data = { new NameValuePair("keyword", keyword) }; 
        // // 将表单的值放入postMethod中 
        // postMethod.setRequestBody(data); 
        //    以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下            
 
        try { 
            int statusCode = client.executeMethod(postMethod); 
            response = new String(postMethod.getResponseBodyAsString() 
                    .getBytes("ISO-8859-1"), "gb2312");//这里要注意下 gb2312要和你抓取网页的编码要一样 
             
            String p = response.replaceAll("\\&[a-zA-Z]{1,10};", "") 
                    .replaceAll("<[^>]*>", "");//去掉网页中带有html语言的标签 
            System.out.println(p); 
        } catch (Exception e) { 
 
            e.printStackTrace(); 
        } 
        return response; 
 
    } 
 
    // 第二种方法 
    // 这种方法是JAVA自带的URL来抓取网站内容 
 
 
    public String getPageContent(String strUrl, String strPostRequest, 
            int maxLength) { 
        // 读取结果网页 
        StringBuffer buffer = new StringBuffer(); 
        System.setProperty("sun.net.client.defaultConnectTimeout", "5000"); 
        System.setProperty("sun.net.client.defaultReadTimeout", "5000"); 
        try { 
            URL newUrl = new URL(strUrl); 
            HttpURLConnection hConnect = (HttpURLConnection) newUrl 
                    .openConnection(); 
            // POST方式的额外数据 
            if (strPostRequest.length() > 0) { 
                hConnect.setDoOutput(true); 
                OutputStreamWriter out = new OutputStreamWriter(hConnect 
                        .getOutputStream()); 
                out.write(strPostRequest); 
                out.flush(); 
                out.close(); 
            } 
            // 读取内容 
             
            BufferedReader rd = new BufferedReader(new InputStreamReader( 
                    hConnect.getInputStream())); 
            int ch; 
            for (int length = 0; (ch = rd.read()) > -1 
                    && (maxLength <= 0 || length < maxLength); length++) 
                buffer.append((char) ch); 
            String s = buffer.toString(); 
            s.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll("<[^>]*>", ""); 
            System.out.println(s); 
             
            rd.close(); 
            hConnect.disconnect(); 
            return buffer.toString().trim(); 
        } catch (Exception e) { 
            // return "错误:读取网页失败!"; 
            // 
            return null; 
 
              
        } 
    } 
 
然后写个测试类: 
 
 
public static void main(String[] args) { 
 
        String url = "http://www.renren.com"; 
        String keyword = "人人"; 
        createhttpClient p = new createhttpClient(); 
        String response = p.createhttpClient(url, keyword); // 第一种方法 
        // p.getPageContent(url, "post", 100500);//第二种方法 
    } 
 
呵呵,看看控制台吧,是不是把网页的内容获取了 
 
第三种方法: 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.URL; 
 
 
    public class GetUrlToHtml { 
        public static void main(String[] args) { 
            InputStream in = null;    
            OutputStream out = null; 
   
            try { 
 
 
 
 
                if ((args.length != 1)&& (args.length != 2))  
                    throw new IllegalArgumentException("Wrong number of args"); 
          
                
                URL url = new URL(args[0]);   
                in = url.openStream();         
                if (args.length == 2)          
                    out = new FileOutputStream(args[1]); 
                else out = System.out; 
          
     
 
 
 
 
                byte[] buffer = new byte[4096]; 
                if(out==System.out){new String();} 
                int bytes_read; 
                while((bytes_read = in.read(buffer)) != -1){ 
                    out.write(buffer, 0, bytes_read);}                      
    } 
           
            catch (Exception e) { 
                System.err.println(e); 
                System.err.println("Usage: java GetURL <URL> [<filename>]"); 
            } 
            finally {  
                try { in.close(); out.close(); } catch (Exception e) {} 
            } 
        } 
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; public class GetNetHtml { public static String createhttpClient(String url, String param) { HttpClient client = new HttpClient(); String response = null; String keyword = null; PostMethod postMethod = new PostMethod(url); // try { // if (param != null) // keyword = new String(param.getBytes("gb2312"), "ISO-8859-1"); // } catch (UnsupportedEncodingException e1) { // // TODO Auto-generated catch block // e1.printStackTrace(); // } // NameValuePair[] data = { new NameValuePair("keyword", keyword) }; // // 将表单的值放入postMethod中 // postMethod.setRequestBody(data); // 以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下 try { int statusCode = client.executeMethod(postMethod); response = new String(postMethod.getResponseBodyAsString() .getBytes("ISO-8859-1"), "gb2312");//这里要注意下 gb2312要和你抓取网页的编码要一样 String p = response.replaceAll("\\&[a-zA-Z]{1,10};", "") .replaceAll("<[^>]*>", "");//去掉网页中带有html语言的标签 System.out.println(p); } catch (Exception e) { e.printStackTrace(); } return response; } // 第二种方法 // 这种方法是JAVA自带的URL来抓取网站内容 public String getPageContent(String strUrl, String strPostRequest, int maxLength) { // 读取结果网页 StringBuffer buffer = new StringBuffer(); System.setProperty("sun.net.client.defaultConnectTimeout", "5000"); System.setProperty("sun.net.client.defaultReadTimeout", "5000"); try { URL newUrl = new URL(strUrl); HttpURLConnection hConnect = (HttpURLConnection) newUrl .openConnection(); // POST方式的额外数据 if (strPostRequest.length() > 0) { hConnect.setDoOutput(true); OutputStreamWriter out = new OutputStreamWriter(hConnect .getOutputStream()); out.write(strPostRequest); out.flush(); out.close(); } /*部分删节,请下载细看!!*/ public static void main(String[] args) { String url = "http://www.liuzm.com"; String keyword = "刘志猛博客"; GetNetHtml p = new GetNetHtml(); String response = p.createhttpClient(url, keyword); // 第一种方法 // p.getPageContent(url, "post", 100500);//第二种方法 } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值