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

在网页抓取的过程中,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,才能正确返回我们所需的页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值