httpclient 抓取网页(Java的Http协议客户端HttpClient来实现抓取网页数据(组图))

优采云 发布时间: 2022-02-28 21:08

  httpclient 抓取网页(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爬取的数据。让我们练习一下这两个工具的使用。

  搁浅了一阵子,暂时……以后更新

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线