您的位置:首页 > 理论基础 > 计算机网络

网络爬虫学习笔记——GET方法下几种常用情况

2016-11-20 18:14 561 查看
在网页抓取的过程中,GET方法是最基础的方法,很多网站都是主要由GET方法请求组成的(当然也有很变态的,这种网站的开发人员辛苦了,一般下一个页面访问需要的参数是上个页面中源码的内容)。下面以GET方法简单介绍些常遇到的情况。

 

1、  参数提交

参数提交并不是POST方法的专利,GET方法也可以实现对应的参数传递。这种主要是在请求的地址中进行传值,最常见的传值应该是翻页。如下图中在百度中搜索“csdn”,主要换页进行的传值是以每页的条数来进行累加的。



在一些简单网站中,许多的登录也是从地址URL中进行传值从而实现登录。一旦传值错误,很多情况下会导致返回404,这也就使我们无法正常的返回需要的结果。

 

 

2、  页面跳转

当我们在打开一个页面时,有的页面可能会提示你“正在跳转,请稍后……”或者页面在打开后又会有很刷新的痕迹的跳转的痕迹。这就是有些网站实现了跳转,这种多发于在原有的网页的基础上进行了改版,但保留原入口的方法。这种跳转的方法我们用F12已经无法完整的获取其整个过程,这就需要我们用fiddler来捕获浏览器的整个过程。(具体fiddler的使用方法网上很多,也比较简单,主要是配置fiddler能兼容各种情况即可)



在上图中,302的即为跳转的页面,这个访问将跳转为下面对应的200的网址。在Apache的方法中,一般是默认帮我们实现了跳转的过程,但有时我们也要获取跳转之前的相关信息,就必须要先设定好不提供跳转。

下面是设定跳转的方法,可以尝试设定TRUE和FALSE两种情况下获得的结果有什么不同。

 import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/******
*
* @author luffy
* @deprecated 简单的get请求方法
*/
public class Test {

public static void main(String[] args){

CloseableHttpClient httpClient=HttpClients.createDefault();//类似于浏览器核心的工具,是获取源码的主要工具

HttpGet getmethod = new HttpGet("http://www.weibo.com/csdn");//定义获取的GET方法

HttpResponse httpresponse = null;

//禁止重定向配置
getmethod.setConfig(RequestConfig.custom().setRedirectsEnabled(true).build());

try {

httpresponse = httpClient.execute(getmethod);//开始获取源码,返回的结果除了源码外,还有其他一些信息

} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

HttpEntity entity = httpresponse.getEntity();//从结果中获取源码的实体

String out = "";

try {
out = EntityUtils.toString(entity);//将源码实体转化为字符串
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("此时网页的状态码为:" +httpresponse.getStatusLine());
System.out.print("网页源码为:" + out);

}
}

 

 

3、  refer的设定

这是网页请求中明确路径的一种方法。在网页访问追踪中,我们往往能发现有Refer这个字段。它确定了当前页面访问前的上个页面的具体地址。根据这个信息,我们可以知道在fiddler抓取的流程中,上线两个访问地址并不一定是有关系。这就避免了我们抓取了过多无用的页面。而且在有的网站中,它的同样的URL可能有多种用途,就需要制定相应的refer,才能正确返回我们所需的页面。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络爬虫