使用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.多线程并发访问,设置访问间隔,模拟登陆,数据存储
当你想把这个类写的完善时,以上是你需要考虑的问题。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。