Java网络爬虫技术《一》 HttpClient
HttpClient
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。所以要想爬取网络资源,就要使用Http协议访问网页。
HttpClient 分为 无参GET请求、有参GET请求、无参POST请求、有参POST请求。
无参GET请求:类似普通的主页连接,没有附带任何参数的网页
HttpGet httpGet = new HttpGet("https://www.baidu.com/");
有参GET请求:附带有参数的连接,如搜索、分类功能的网页
HttpGet httpGet = new HttpGet("https://search.jd.com/Search?keyword=Java");
无参POST请求:跟GET有参请求相同
HttpPost httpPost = new HttpPost("https://www.baidu.com/");
有参POST请求: url地址没有参数,参数keys=java放到表单中进行提交
//	创建HttpGet请求
HttpPost httpPost = new HttpPost("https://search.jd.com/");
//	声明存放参数的List集合
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("keys", "java"));
//	创建表单数据Entity
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");
//	设置表单Entity到httpPost请求对象中
httpPost.setEntity(formEntity);
入门程序
IDEA环境配置
<dependencies>
<!-- HttpClient -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.3</version>
</dependency>
<!-- 日志 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
</dependency>
加入 log4j.properties资源文件
log4j.rootLogger=DEBUG,A1
log4j.logger.cn.itcast = DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
编写代码
public static void main(String[] args) throws Exception {
	//	创建 HttpClient 对象
	CloseableHttpClient httpClient = HttpClients.createDefault();
	//	创建 HTTPGET 请求
	HttpGet httpGet = new HttpGet("https://www.baidu.com/");
	//	使用 HttpClient 发起请求
  	CloseableHttpResponse response = httpClient.execute(httpGet);
	//	判断响应状态码是否为200(200指OK,,网页请求成功)
    if (response.getStatusLine().getStatusCode() == 200) {
    	//	先把网页保存成String,解析获取字符集,将网页中文内容转换成对应字符集,再转换成统一的字符集utf-8
        String content = EntityUtils.toString(response.getEntity(), "UTF-8");
        System.out.println(content);
    }
}
输出结果为网页的源码,可自行演示
HttpClient 连接池
跟线程、数据库连接一样,都需要一定数量的连接池,如果每次请求都要创建 HttpClient ,就会有频繁创建和销毁的问题,所以可以使用连接池来解决这种问题。
public static void main(String[] args) {
	PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
    //  设置最大连接数
    cm.setMaxTotal(200);
    //  设置每个主机的并发数
    cm.setDefaultMaxPerRoute(20);
    TestGet(cm);
}
private static void TestGet(PoolingHttpClientConnectionManager cm) {
    CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
    HttpGet httpGet = new HttpGet("https://www.baidu.com/");
    CloseableHttpResponse response = null;
    try {
        response = httpClient.execute(httpGet);
        // 判断状态码是否是200
        if (response.getStatusLine().getStatusCode() == 200) {
            // 解析数据
            String content = EntityUtils.toString(response.getEntity(), "UTF-8");
            System.out.println(content.length());
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //释放连接
        if (response == null) {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
此外,由于网络等原因,请求速度会变慢,所以我们得自定义具体事件,可以通过设置RequestConfig参数,再通过HTTPGET进行设置就行了。
// 设置请求参数
RequestConfig requestConfig = RequestConfig.custom()
        .setConnectTimeout(1000)//设置创建连接的最长时间
        .setConnectionRequestTimeout(500)//设置获取连接的最长时间
        .setSocketTimeout(10 * 1000)//设置数据传输的最长时间
        .build();	//	还有更多参数,如线程等,有需要请自行查阅资料
httpGet.setConfig(requestConfig);
												
											Java网络爬虫技术《一》 HttpClient的更多相关文章
- Java网络爬虫技术《二》Jsoup
		
Jsoup 当我们成功抓取到页面数据了之后,还需要对抓取的数据进行解析,而刚好,Jsoup 是一款专门解析 html 页面的技术.Jsoup是一款基于 Java 的HTML 解析器,可直接解析某个 U ...
 - 网络爬虫技术实现java依赖库整理输出
		
网络爬虫技术实现java依赖库整理输出 目录 1 简介... 2 1.1 背景介绍... 2 1.2 现有方法优缺点对比... 2 2 实现方法... 2 ...
 - 学 Java 网络爬虫,需要哪些基础知识?
		
说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...
 - Java 网络爬虫,就是这么的简单
		
这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑 ...
 - java网络爬虫基础学习(一)
		
刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...
 - Java网络爬虫笔记
		
Java网络爬虫笔记 HttpClient来代替浏览器发起请求. select找到的是元素,也就是elements,你想要获取具体某一个属性的值,还是要用attr("")方法.标签 ...
 - Java 网络爬虫获取网页源代码原理及实现
		
Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL ...
 - java网络爬虫基础学习(三)
		
尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...
 - 企业级Python开发大佬利用网络爬虫技术实现自动发送天气预告邮件
		
前天小编带大家利用Python网络爬虫采集了天气网的实时信息,今天小编带大家更进一步,将采集到的天气信息直接发送到邮箱,带大家一起嗨~~拓展来说,这个功能放在企业级角度来看,只要我们拥有客户的邮箱,之 ...
 
随机推荐
- linux系统下深度学习环境搭建和使用
			
作为一个AI工程师,对Linux的一些技能的掌握也能从一定层面反应工程师的资深水平. 要求1:基于SSH的远程访问(本篇文章) 能用一台笔记本电脑,远程登陆一台linux服务器 能随时使用笔记本电脑启 ...
 - 1TB是多大?
			
TB是计算机的存储单位,用来描述计算机的存储容量.另外还有GB.MB.KB.B.就像长度单位米.分米.厘米.毫米一样,它们之间有换算关系: 1KB = 1024B 1M = 1024KB 1GB = ...
 - C# - 习题03_分析代码写出结果A.X、B.Y
			
时间:2017-08-23 整理:byzqy 题目:分析代码,写出程序的输出结果: 文件:Program.cs 1 using System; 2 3 namespace Interview2 4 { ...
 - Confluence7.4安装并破解汉化教程
			
Confluence是一款由JAVA编写用于企业知识库管理协同软件,多用于构建企业内部WIKI,支持多人协作,共享信息等. 当前系统环境Centos7.9,内存至少2G以上,数据库采用MySQL5.7 ...
 - linux centos7 移动文件到指定目录
			
2021-08-26 在 centos7 环境下怎么移动一个文件到其他的目录下呢? 使用命令 mv 文件名 指定目录 即可完成该操作. 那么怎么将一个文件夹下的内容移动到另一个文件夹下呢?比如有时 ...
 - 存储系统管理(三)——磁盘配额及lvm逻辑卷管理
			
Linux是一个多用户的操作系统,系统有很多用户,就必须限制每个用户的保存空间,配额就是来管理用户空间的,配额只是针对与设备而言. 1.新建一个分区 2.格式化分区为xfs文件系统 3.将其以配额的方 ...
 - vue JS获取当前时间并格式化 (  前端小细节,大进步 )
			
JS // 获取并且格式化时间 formatter (thistime, fmt) { let $this = new Date(thistime) let o = { ...
 - vue element-ui 组件上传图片 之后 对上传按钮 进行隐藏,删除之后重新显示
			
注:如果在当前的 vue 文件里 写了 style 样式,得 去除 scoped [私有属性必须去除,不能保留](这个是重点,不去除不生效), template 部分 <el-upload ...
 - 关于antd Select 限制选择个数的解决方案
			
应用场景描述: Select 被form 所包裹,且被getFieldDecorator修饰.所以值的改变应该通过form的setFieldsValue方法. Select模式肯定会是multiple ...
 - zabbix 批量安装+自动注册
			
环境介绍 zabbix版本Zabbix 4.2.6 zabbix server:10.0.10.234 zabbix-agent:16台 Linux 7.x设备 自动发现 自动发现的好处:快速发现 ...