您的位置:首页 > 其它

通过指定的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抓取网页的内容,之后,我们将给出一个详细的例子来说明如何获取网页。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: