通过指定的URL抓取网页内容
2015-12-27 11:12
323 查看
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地
。类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器
端,然后读取服务器端的响应资源。
Java语言是为网络而生的编程语言,它把网络资源看成是一种文件,它对网络资源的访问
和对本地文件的访问一样方便。它把请求和响应封装为流。因此我们可以根据相应内容,
获得响应流,之后从流中按字节读取数据。例如,java.net.URL类可以对相应的Web服务器发
出请求并且获得响应文档。java.net.URL类有一个默认的构造函数,使用URL地址参数,构造
URL对象:
URL pageURL = new URL(path);
接着,可以通过获得的URL对象来获取网络流,进而像操作本地文件一样来操作网络资源:
InputStream stream = pageURL.openStream();
在实际的项目中,网络环境比较复杂。为了 便于应用程序的开发,实际开发时常常使用Apache
的HTTP客户端开源项目--HttpClient。它完全能够处理HTTP连接中的各种问题,使用起来非常方便
,只需在项目中引入HttpClient.jar包,就可以模拟IE来获取网页内容:例如(使用get方式访问web资源)
//创建一个客户端,类似于打开一个浏览器
HttpClient httpclient = new HttpClient();
//创建一个get方法,类似于在浏览器地址栏中输入一个地址
GetMethod getMethod = new GetMethod("http://www.blablabla.com");
//回车,获得响应状态码
int statusCode = httpclient.executeMethod(getMethod);
//查看命中情况,可获得的东西还有很多,例如head、cookies等
System.out.println("response="+getMethod.getResponseBodyAsString())
//释放
getMethod.releaseConnection();
采用post方法进行HTTP请求。例如:
//得到post方法
PostMethod PostMethod = new PostMethod("http://www.saybot.com/postme");
//使用数组来传递参数
NameValuePair[] postData = new NameValuePair[2];
//设置参数
postData[0] = new NameValuePair("武器","枪");
postData[0] = new NameValuePair("什么抢","神枪");
postMethod.addParameters(postData);
//回车,获得响应状态码
int statusCode = httpclient.executeMethod(getMethod);
System.out.println("response="+getMethod.getResponseBodyAsString())
//释放
getMethod.releaseConnection();
有时,我们执爬虫的机器不能直接访问web资源,而需要通过HTTP代理服务器去访问,HttpClient对代理服务器也有很好地支持。如:
//创建HttpClient相当于打开一个代理
HttpClient httpClient = new HttpClient();
//设置代理服务器的ip地址和端口
httpClient.getHostConfigurationn().setProxy("192.168.0.1",9527);
//告诉HttpClient,使用抢先验证,否则你会收到“你没有资格”的恶果
httpCilent.getParams().setAuthenticationPreemptive(true);
//MyProxyCredentialsProvider返回代理的credential(username/password)
httpCilent.getParams().setParameter(CredentialsProvider.PROVIDER,new MyProxyCredentialsProvider());
//设置代理服务器的用户名和密码
httpClient.getState().setProxyCredentials(new AuthScope("192.168.0.1",AuthScope.ANY_PORT,AuthScope.ANY_REALM),new UsernamePasswordCredentials("username","password"))
这一节我们详细的介绍了如何使用HttpClient抓取网页的内容,之后,我们将给出一个详细的例子来说明如何获取网页。
。类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器
端,然后读取服务器端的响应资源。
Java语言是为网络而生的编程语言,它把网络资源看成是一种文件,它对网络资源的访问
和对本地文件的访问一样方便。它把请求和响应封装为流。因此我们可以根据相应内容,
获得响应流,之后从流中按字节读取数据。例如,java.net.URL类可以对相应的Web服务器发
出请求并且获得响应文档。java.net.URL类有一个默认的构造函数,使用URL地址参数,构造
URL对象:
URL pageURL = new URL(path);
接着,可以通过获得的URL对象来获取网络流,进而像操作本地文件一样来操作网络资源:
InputStream stream = pageURL.openStream();
在实际的项目中,网络环境比较复杂。为了 便于应用程序的开发,实际开发时常常使用Apache
的HTTP客户端开源项目--HttpClient。它完全能够处理HTTP连接中的各种问题,使用起来非常方便
,只需在项目中引入HttpClient.jar包,就可以模拟IE来获取网页内容:例如(使用get方式访问web资源)
//创建一个客户端,类似于打开一个浏览器
HttpClient httpclient = new HttpClient();
//创建一个get方法,类似于在浏览器地址栏中输入一个地址
GetMethod getMethod = new GetMethod("http://www.blablabla.com");
//回车,获得响应状态码
int statusCode = httpclient.executeMethod(getMethod);
//查看命中情况,可获得的东西还有很多,例如head、cookies等
System.out.println("response="+getMethod.getResponseBodyAsString())
//释放
getMethod.releaseConnection();
采用post方法进行HTTP请求。例如:
//得到post方法
PostMethod PostMethod = new PostMethod("http://www.saybot.com/postme");
//使用数组来传递参数
NameValuePair[] postData = new NameValuePair[2];
//设置参数
postData[0] = new NameValuePair("武器","枪");
postData[0] = new NameValuePair("什么抢","神枪");
postMethod.addParameters(postData);
//回车,获得响应状态码
int statusCode = httpclient.executeMethod(getMethod);
System.out.println("response="+getMethod.getResponseBodyAsString())
//释放
getMethod.releaseConnection();
有时,我们执爬虫的机器不能直接访问web资源,而需要通过HTTP代理服务器去访问,HttpClient对代理服务器也有很好地支持。如:
//创建HttpClient相当于打开一个代理
HttpClient httpClient = new HttpClient();
//设置代理服务器的ip地址和端口
httpClient.getHostConfigurationn().setProxy("192.168.0.1",9527);
//告诉HttpClient,使用抢先验证,否则你会收到“你没有资格”的恶果
httpCilent.getParams().setAuthenticationPreemptive(true);
//MyProxyCredentialsProvider返回代理的credential(username/password)
httpCilent.getParams().setParameter(CredentialsProvider.PROVIDER,new MyProxyCredentialsProvider());
//设置代理服务器的用户名和密码
httpClient.getState().setProxyCredentials(new AuthScope("192.168.0.1",AuthScope.ANY_PORT,AuthScope.ANY_REALM),new UsernamePasswordCredentials("username","password"))
这一节我们详细的介绍了如何使用HttpClient抓取网页的内容,之后,我们将给出一个详细的例子来说明如何获取网页。
相关文章推荐
- 自定义collectionView,最后一行的居中
- veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响
- C++之路进阶——边表
- Floyd-Warshall算法 (任意两点间的最短路问题)
- 链路聚合、Trunk、端口绑定和捆绑简析
- HDOJ 2009 求数列的和
- 链路聚合、Trunk、端口绑定和捆绑简析
- ubuntu中在Launcher上添加Android Studio的运行图标
- Realm for Android快速入门教程
- dp,px,pt,sp 的区别 以及dp 和 px 互转
- JVM飙高排查脚本-结构分析
- SQL语句,多表查询,连接查询,嵌套查询,集合操作,有IN谓词,有比较运算符,有ANY\EXIST谓词的查询
- 【C++】深度探索C++对象模型之执行期语意学
- DHCP源码分析-系统概述
- MinGW 是什么?
- 打包混淆初体验
- AlwaysON同步过程
- mooseFS学习篇
- 黑马程序员——网络编程
- TI DSP TMS320C66x学习笔记之VLIB测试数据(三)