java爬虫抓取网页数据(Java的Http协议客户端HttpClient来实现抓取网页数据(组图))
优采云 发布时间: 2021-10-14 15:03java爬虫抓取网页数据(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
汤品介绍
jsonp 是一个 Java Html 解析器,可以自行解析 URL 地址和 html 文本内容。它有一组现成的 API 来删除和操作数据。
jsonp的作用:
Jsoup 解析 URL
添加 Jsoup 依赖以使用 Jsoup
注意:Jsoup 只限于使用 Html 解析工具,而不是替代 HttpClient 来发起请求,因为 HttpClient 支持多线程、连接池、代理等技术,而 Jsoup 对此的支持并不理想。专业的事情交给专业的人,HttpClient发送请求抓取数据,Jsoup做解析
Jsoup 解析字符串
Jsoup解析文件
这是上面的静态页面。除了转换成String再解析,我们也可以直接解析文件
使用 Dom 遍历文档
记得还有一个sax解析,比较麻烦,现在差点忘了;
Dom解析,不知道大家有没有听过或者用过。反正我之前用过,但是解析的确实是XML。先简单介绍一个Dmo方法。
Dmo 解析会将目标文档视为一个对象。首先将整个文档加载到内存中。如果文档太大,内存可能会溢出(一般不会)。加载到内存后,会构建一个Dom树,然后Just开始提供访问和修改操作
如果你之前没有学习过,我们通过一个小Demo来学习。如果您使用过它,我们有权对其进行审核:
Java代码如下: 我演示了几个常用的获取页面数据的API
从元素中获取属性
选择器
下面是上述always选择器的使用演示
选择器选择器组合使用
Hello World 类爬虫案例列表
在上面的学习中,我们已经知道HttpClient是用来爬取数据的,Jsoup是用来分析HttpClient爬取到的数据的。下面我们来练习一下这两个工具的使用。
搁浅了一会儿,暂时……以后更新