【已更新实例】Java网络爬虫-HttpClient工具类

关于用Java进行爬虫的资料网上实在少之又少,但作为以一名对Java刚刚初窥门径建立好兴趣的学生怎么能静得下心用新学的Python去写,毕竟Java是世界上最好的语言嘛 (狗头)

关于Java爬虫最受欢迎的一个框架Jsoup常常搭配HttpClient来使用,因为Jsoup.connect(url)下载网页没有多次重试的功能,所以我们更多的使用HttpClient来进行网页的下载,而Jsoup则更多的用来解析网页。毕竟专业的事还得专业的人来干!

对于下载网页我们没必要每次都花费大把的时间去写,直接写一个工具类,在Jsoup中直接调用即可

关于HttpClient

关于HttpClient主要有两个版本

  • org.apache.http.client.HttpClient `3.X`

  • org.apache.commons.httpClient.HttpClient `4.X`

相比较4.X的功能更加丰富简洁,但3.x也不差,下面拿3.x举例

HttpClient实例代码

package com.Jsoup;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

import java.io.IOException;

//下载网页工具,返回html对象
public class HttpUtil {
    static String fileName = null;
    static String content;

    /**
     * 获取网页主体内容,完成HttpClient的下载任务,剩下的交给Jsoup来解析
     * @param url URL地址
     * @param charset 设置编码格式
     * @return 返回网页 html内容 
     * @throws IOException 抛出IO异常
     */
    public static String getContent(String url,String charset) throws IOException {


        //1.创建客户端对象并设置参数
        HttpClient httpClient = new HttpClient();
        //设置 Http 超时
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(2000);

        //2.生成GetMethod对象并设置参数
        GetMethod getMethod = new GetMethod(url);
        //设置 Get 请求超时
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,2000);
        getMethod.getParams().setContentCharset(charset);
        //设置请求重试处理-这是使用HttpClient下载网页而不用Jsoup的原因
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());

        //设置头信息
        //getMethod.getParams().setParameter(HttpMethodParams.USER_AGENT,"需要添加的代理信息");

        //3.执行 Get 请求
            int statusCode = httpClient.executeMethod(getMethod);
            //判断访问的状态码
            if (statusCode != HttpStatus.SC_OK){
                System.err.println("请求失败: "+getMethod.getStatusLine());
                fileName = null;
            }else {
                //4.处理 HTTP 响应内容
                //获得响应体内容
                content = getMethod.getResponseBodyAsString();
            }

            //5.释放连接
            getMethod.releaseConnection();

            //输出到控制台
            //System.out.println(content);
            return content;
    }

}
注意:这里的用户代理(User-Agent)需要按需求设置,后期可能需要设置大量的代理,我们将设置一个Use-Agent库,每次执行爬虫任务将从中随机选取一个,防止被网站封锁

Jsoup代码

Jsoup实例已经放到下一篇文章了,点击这里跳转

http://t.csdn.cn/JM6yL

public class JsoupDemo01 {
    public static void main(String[] args) throws IOException {
        String url = "https://xxxx.com";
        String html =  HttpUtil.getContent(url,"UTF-8");
        //Jsoup.parse(String html)可以根据html文档来解析
        Document doc = Jsoup.parse(html);
    //具体解析网页不做展示,已更新
    }
}

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