httpclient 抓取网页(Java的Http协议客户端HttpClient来实现抓取网页数据(组图))
优采云 发布时间: 2022-02-28 21:08httpclient 抓取网页(Java的Http协议客户端HttpClient来实现抓取网页数据(组图))
爬虫爬取网页上的数据和我们点击链接单独访问网页数据是一样的。就是使用Http协议访问网页。这里我们使用Java Http协议客户端HttpClient来实现网页数据的抓取。
你好世界
获取带参数的请求
使用参数发布请求
帖子也很简单,和上面差不多,只是改变发起请求的方式,如下:
当然,如果没有参数,就不需要创建表单对象,只要有一个HttpPost对象即可。
代码中的对象说明:
代码优化:连接池
在爬取数据的过程中,连接对象HttpClient的创建和销毁非常频繁,这里我们使用连接池对其进行优化
public class poolTest {
public static void main(String[] args) {
//创建连接池管理器
PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager();
pcm.setMaxTotal(100); //设置池内最大连接数
pcm.setDefaultMaxPerRoute(10); //设置每个坠机的最大连接数
//从连接池中获取连接对象,而不是单独创建连接对象
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(pcm).build();
HttpGet httpGet = new HttpGet("https://www.cnblogs.com/msi-chen");
System.out.println(httpGet);
//使用httpClient发起请求,获得响应
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpGet);
//解析响应,获取到数据
if (response.getStatusLine().getStatusCode() == 200){
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity,"utf8");
System.out.println(content.length());
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (response != null){
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
//因为我们是连接池中获取到的连接,所以这里不能再给他关闭了
//httpClient.close();
}
}
}
}
获取资源的相关时间配置
Jsoup 不是 Jsonp
经过我们上面的学习,我们已经可以通过HttpClient抓取页面了。抓取页面后,我们就可以解析了。我们可以使用字符串解析工具来解析页面,也可以使用正则表达式。解析,但是这两种方案的开发成本很高,不推荐使用。这里我们学习了一个解析html页面的技术,Jsonp
Jsoup简介
jsonp是一个Java Html解析器,可以自己解析一个url地址和html文本内容。它有一组现成的 API 来删除和操作数据。
jsonp的特点:
Jsoup解析网址
添加Jsoup的依赖以使用Jsoup
注意:Jsoup只限于使用Html解析工具,不能代替HttpClient发起请求,因为HttpClient支持多线程、连接池、代理等技术,而Jsoup对此的支持并不理想,专业的事情交给专业的人,HttpClient发送请求抓取数据,Jsoup做解析
Jsoup解析字符串
Jsoup解析文件
还是上面的静态页面,除了转成String后面再解析,我们也可以直接解析文件
使用 Dom 方法遍历文档
记得还有一个sax解析,比较麻烦,现在差点忘了;
dom解析,不知道大家有没有听说过或者用过。反正我以前用过,但是解析的确实是XML。让我简单介绍一个Dmo方法。
Dmo 解析会将目标文档视为对象。首先,将整个文档加载到内存中。如果文档太大,内存可能会溢出(一般不会)。加载到内存后,会构建一个Dom树,然后进行访问和修改操作
没学过的,我们通过一个小demo来了解一下。如果您使用过它,我们应该对其进行审查:
Java代码如下: 我已经演示了几个常用的获取页面数据的API
从元素中获取属性
选择器选择器
下面是上述always选择器的使用演示
选择器选择器组合使用
Hello World 级爬虫小箱子
在上面的学习中,我们已经知道HttpClient的作用是爬取数据,而Jsoup是解析HttpClient爬取的数据。让我们练习一下这两个工具的使用。
搁浅了一阵子,暂时……以后更新