Eclipse中Java做网络爬虫基本方法

      基本方法分为两大步,第一步即利用HttpClient建立网络连接并发送请求,第二步即利用HtmlParser解析网页。

1.利用HttpClient建立网络连接(并获得整个网页的内容)

首先,我们必须安装好 HttpClient。

HttpClient 可以在http://jakarta.apache.org/commons/httpclient/downloads.html下载

HttpClient 用到了 Apache Jakarta common 下的子项目 logging,可以从这个地址http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi下载到 common logging,从下载后的压缩包中取出 commons-logging.jar 加到 CLASSPATH 中

HttpClient 用到了 Apache Jakarta common 下的子项目 codec,可以从这个地址http://jakarta.apache.org/site/downloads/downloads_commons-codec.cgi 下载到最新的 common codec,从下载后的压缩包中取出 commons-codec-1.x.jar 加到 CLASSPATH 中

参考连接HttpClient入门

需要导入的3个包如下图所示:
Eclipse中Java做网络爬虫基本方法_第1张图片

示例代码如下,请求的http地址根据实际情况改动:
package SeanCrawler;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;

public class HttpClientTest{
	public static void main(String[] argv){
		//连接http服务器端
		HttpClient httpClient=new HttpClient();
		byte[] responseBody = null;
		GetMethod getMethod=new GetMethod("http://localhost/raw_dataset/2013-2014autumn.htm");
		try{
			int statusCode=httpClient.executeMethod(getMethod);
			if(statusCode!=HttpStatus.SC_OK){
				System.err.println("Method failed: "+getMethod.getStatusLine());
			}
			//byte[] responseBody=getMethod.getResponseBody();
			//System.out.println(new String(responseBody));
			
			//当网页内容数据量大时推荐使用
			InputStream in=getMethod.getResponseBodyAsStream();
            if (in != null) {
                byte[] tmp = new byte[4096];
                int bytesRead = 0;
                ByteArrayOutputStream buffer = new ByteArrayOutputStream(1024);
                while ((bytesRead = in.read(tmp)) != -1) {
                    buffer.write(tmp, 0, bytesRead);
                }
                responseBody = buffer.toByteArray();
                System.out.println(new String(responseBody));
            }
		}catch(HttpException e){
			System.out.println("Please check your provided http address!");
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}catch(Exception ex){
			System.out.println("Error:"+ex.toString());
		}finally{			
			getMethod.releaseConnection();
		}
	}
}



2.利用HtmlParser解析获取的网页,取得感兴趣的元素内容
需要下载htmllexer.jar和htmlparser.jar两个包并导入项目,如下图所示
Eclipse中Java做网络爬虫基本方法_第2张图片

在有了前面的httpclient对整个网页内容的获取后,在添加htmlparser对网页解析获取想要的数据,使用示例代码如下:
//下面用html解析网页
Parser parser=new Parser();
parser=Parser.createParser(new String(responseBody,"gb2312"),"gb2312");//原网站编码格式gb2312
NodeFilter filter1=new HasAttributeFilter("class","new_table");//设置过滤器,这里的意思是设定具有class属性且属性值为new_table的过滤器
NodeList list=parser.extractAllNodesThatMatch(filter1);//抓取所有通过过滤器的网页DOM节点
		
for (int i=0; i<list.size(); i++) {//基于设定的过滤器我知道抓取的是一个table元素,实际情况就需要你根据你想要的元素内容设置自己的过滤器(这是关键)
	TableTag table = (TableTag) list.elementAt(i);
    TableRow[] rows = table.getRows();//遍历table元素内各个tr乃至td
    for (int r=1; r<rows.length; r++) {
        TableRow tr = rows[r];
        TableColumn[] td = tr.getColumns();
        //可以通过诸如td[1].toPlainTextString()来访问到td内的元素值及某处表格数据值
    }
}

参考连接使用HttpClient和HtmlParser实现简易爬虫

总结:以上就是大题思路,变化较多的就在于HtmlParser解析网页各种元素时实用的过滤方法,这个需要多时间才能熟练掌握。mark一记,自己也是学习的过程~


你可能感兴趣的:(Eclipse中Java做网络爬虫基本方法)