Java网络爬虫(四)--使用HttpClient返回实体内容

在前几篇博客中,一直讲的是使用HttpClient进行请求操作,并判断请求是否成功,但既然做网络爬虫,我们就需要将整个页面的Html拿下来进行分析,这时候就要用到HttpClient的返回实体的内容,然后使用Jsoup进行解析。

HttpClient返回实体内容

import org.apache.http.Header;
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;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

import static java.lang.System.out;

public class HttpClientDemo {
    public static void main(String[] args){
        //创建客户端
        CloseableHttpClient closeableHttpClient = HttpClients.createDefault();

        //创建请求Get实例
        HttpGet httpGet = new HttpGet("https://www.baidu.com");

        //设置头部信息进行浏览器模拟行为
        httpGet.setHeader("Accept", "text/html,application/xhtml+xml," +
                "application/xml;q=0.9,image/webp,*/*;q=0.8");
        httpGet.setHeader("Accept-Encoding", "gzip, deflate, sdch, br");
        httpGet.setHeader("Accept-Language", "zh-CN,zh;q=0.8");
        //httpGet.setHeader("Cookie", "......");
        httpGet.setHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" +
                " (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");

        try {
            //客户端执行httpGet方法,返回响应
            CloseableHttpResponse closeableHttpResponse = closeableHttpClient.execute(httpGet);

            //得到服务响应状态码
            if(closeableHttpResponse.getStatusLine().getStatusCode() == 200)   
                //得到响应实体
                String entity = EntityUtils.toString (closeableHttpResponse.getEntity(),"utf-8");
            }
            else{
                //如果是其他状态码则做其他处理,这部分知识博主也还没有系统的学习,以后给大家补上
                //对于服务器返回的各个状态码的含义希望大家能了解一下
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里大家可以做一个测试,手动找到自己登录百度成功后那个页面中请求头的cookie值放入其中,然后得到实体内容,和注释cookie后得到实体内容,两个进行对比,发现的确可以实现模拟登录。然后由于我第一篇博客中使用的cookie已经过了3天,所以刚才使用那个cookie的时候发现是失效的,这也说明了使用cookie进行模拟登录的确需要人为的经常的更新cookie,极不方便,所以添加cookie这种方法只适合短时间内的爬虫需求,对于一些公司长久的爬虫需求来说我们还是通过Post发送参数得到生成的cookie然后自动更新cookie才是上策。

你可能感兴趣的:(java,httpclient,网络爬虫)