JAVA使用爬虫抓取网站网页内容

本文实例讲述了JAVA使用爬虫抓取网站网页内容的方法。分享给大家供大家参考。具体如下:

最近在用JAVA研究下爬网技术,呵呵,入了个门,把自己的心得和大家分享下
以下提供二种方法,一种是用apache提供的包.另一种是用JAVA自带的.

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// 第一种方法
//这种方法是用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 ;
   }
}

然后写个测试类:

?
1
2
3
4
5
6
7
8
public static void main(String[] args) {
   String url = "http://www.jb51.net" ;
   String keyword = "脚本之家" ;
   createhttpClient p = new createhttpClient();
   String response = p.createhttpClient(url, keyword);
   // 第一种方法
   // p.getPageContent(url, "post", 100500);//第二种方法
}

呵呵,看看控制台吧,是不是把网页的内容获取了

希望本文所述对大家的java程序设计有所帮助。

你可能感兴趣的:(PRD,Java)