使用apache httpClient 通过get方式爬取网页,简易类操作。

                 

                 我是从官网下载的最新版本,windows操作系统选zip版本就行了。

                 在网上搜的一些资料,感觉提供的类有点旧了。新下载的包没有相关类,用法也不对。对了,我下载的版本是4.3.6。


                 所以只能自己搜索资料摸索,在下载的包中有相应的guide指导,还有一些现成的例子。


                我自己写了一个简单的例子:

       

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

/**
 * 最简单的HTTP客户端,用来演示通过GET方式访问某个页面
 * 
 * @author napoleonjk
 */
public class SimpleClient {
	public static void main(String[] args) {
		String uri = "http://localhost:8080/xxxxxxxx";
		System.out.println(new SimpleClient().doGet(uri));
	}

	public String doGet(String uri) {

		String result = "";
		try {
			CloseableHttpClient httpclient = HttpClients.createDefault();
			// 创建HttpGet,将要请求的URL通过构造方法传入HttpGet对象。
			HttpGet httpget = new HttpGet(uri);
			CloseableHttpResponse response = httpclient.execute(httpget);
			HttpEntity httpEntity = response.getEntity();
			InputStream inputStream = httpEntity.getContent();
			BufferedReader br = new BufferedReader(new InputStreamReader(
					inputStream));
			String line = "";
			while ((line = br.readLine()) != null) {
				result += "\n" + line;
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return result;
	}
}
注意点:1.代理问题

              一开始,想爬取百度的首页,老是报告以下错误,后来发现是因为公司使用的代理,需要进行代理设置。

             java.net.UnknownHostException: www.baidu.com

             我嫌麻烦,索性访问本地正在做的项目的地址,结果成功获取页面内容。

             2.多线程并发访问,设置访问间隔,模拟登陆,数据存储

              当你想把这个类写的完善时,以上是你需要考虑的问题。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。