请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

网络爬虫(一)- 基本使用

[复制链接]
查看: 106|回复: 0

3万

主题

3万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
92756
发表于 2020-2-15 03:18 | 显示全部楼层 |阅读模式
get请求

    get请求的底子利用
  1.     // 1. 翻开欣赏器,建立HttpClient工具        CloseableHttpClient httpClient = HttpClients.createDefault();        // 2.输入网址,倡议get请求建立HttpGet工具    HttpGet get = new HttpGet("http://112.124.1.187/index.html?typeId=16");        // 3.发情请求,返反响应,利用HttpClient工具倡议请求    CloseableHttpResponse response = httpClient.execute(get);        // 4.分解响应,获得数据    if(response.getStatusLine().getStatusCode() == 200){        HttpEntity entity = response.getEntity();        String content = EntityUtils.toString(entity,"utf-8");        System.out.println(content);    }
复制代码

    get请求带参数(可以间接写在地址后,可是组成硬编码)
  1.     // 1. 翻开欣赏器,建立HttpClient工具    CloseableHttpClient httpClient = HttpClients.createDefault();    try {        // 地址:http://112.124.1.187/index.html?typeId=16.带有参数        // 建立URIBuilder        URIBuilder uriBuilder = new URIBuilder("http://112.124.1.187/index.html");        // 增加参数        // 多个参数可以连着增加,在背面连着setParameter(key,value)        uriBuilder.setParameter("typeId","16");        // 2.输入网址,倡议get请求建立HttpGet工具        HttpGet get = new HttpGet(uriBuilder.build());        // 3.发情请求,返反响应,利用HttpClient工具倡议请求        CloseableHttpResponse response = null;        try {            response = httpClient.execute(get);            // 4.分解响应,获得数据            if(response.getStatusLine().getStatusCode() == 200){                HttpEntity entity = response.getEntity();                String content = EntityUtils.toString(entity,"utf-8");                System.out.println(content);            }        } catch (IOException e) {            e.printStackTrace();        }    } catch (URISyntaxException e) {        e.printStackTrace();    }
复制代码

post请求

    底子利用与get类似把HttpGet改成HttpPost便可以了。
    post请求带参数
  1.     // 1. 翻开欣赏器,建立HttpClient工具    CloseableHttpClient httpClient = HttpClients.createDefault();        // 地址:http://112.124.1.187/index.html?typeId=16.带有参数    // 2.输入网址,倡议post请求建立HttpPost工具    HttpPost post = new HttpPost("http://112.124.1.187/index.html");    // 2.1 声明List调集,封装表单中的参数    List params = new ArrayList();    // 2.2 增加参数    params.add(new BasicNameValuePair("typeId","16"));    // 2.3 建立表单的Entity工具,对参数举行url编码    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params,"utf-8");    // 2.4 设备表单的Entity工具到Post请求中    post.setEntity(formEntity);        // 3.发情请求,返反响应,利用HttpClient工具倡议请求    CloseableHttpResponse response = null;    try {        response = httpClient.execute(post);        // 4.分解响应,获得数据        if(response.getStatusLine().getStatusCode() == 200){            HttpEntity entity = response.getEntity();            String content = EntityUtils.toString(entity,"utf-8");            System.out.println(content);        }    } catch (IOException e) {        e.printStackTrace();    } finally{        if(response != null){            response.close();        }        httpClient.close();    }
复制代码

像每一个毗连操纵一样,HttpClent 毗连一次,再断开,再要用时,继续毗连,再断开。组成浪费资本现象。需要用到 "池" 这个概念。
HttpClient-毗连池
  1.     public static void     main(String[] args) {        // 建立毗连池治理器        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();        // 设备最大毗连数        cm.setMaxTotal(10);        // 设备每个主机最大毗连数        cm.setDefaultMaxPerRoute(2);            // 利用毗连池治理器倡议请求        doGet(cm);        doGet(cm);    }        private static void doGet(PoolingHttpClientConnectionManager cm) {        // 从毗连池中获得HttpClient工具        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();            HttpGet httpGet = new HttpGet("http://112.124.1.187");        CloseableHttpResponse response = null;        try {            response = httpClient.execute(httpGet);            if(response.getStatusLine().getStatusCode() == 200){                String content = EntityUtils.toString(response.getEntity(),"utf-8");                System.out.println(content.length());            }        } catch (IOException e) {            e.printStackTrace();        } finally{            if(response != null){                try {                    response.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            // 不用封闭HttpClient,交由池来治理            // httpClient.close();        }    }
复制代码

请求参数

    这个请求参数不是放在url地址背面的参数,而是你在请求进程中,所触及到需要事前定好的法则。比如,在请求进程中,偶然间由于收集原因原由,或目标办事器的原因原由,请求需要更长的时候才华完成,就需要我们自界说相关的时候。
  1.     HttpGet get =     new HttpGet("http://112.124.1.187/index.html?typeId=16");    // 设备请求信息    RequestConfig config = RequestConfig.custom().setConnectTimeout(10000)  // 建立毗连的最长时候,单元是毫秒                            .setConnectionRequestTimeout(500)   // 设备获得毗连的最长时候,单元是毫秒                            .setSocketTimeout(10 * 1000)    // 设备数据传输的最长时候,单元是毫秒                            .build();    // 将设备给请求    get.setConfig(config);
复制代码


免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 WAYSFOCUS 影像 你 我 他,中国商业影视一站式解决平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表