【前言】你是否也曾羡慕过有些 phython 大神有着如下的神操作:
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/235013I13-0.jpg)
文章插图
他们就轻轻的执行一串代码,就能循环的抓取很多自己想要的数据 。
其实不用太羡慕他们,因为不光 phython 能实现,我们用 JAVA 同样也能够轻松实现 。
闲话不多说,下面我们直接开始实战:
【1】创建项目(1.1)我们用 IDEA(Eclipse同理) 创建一个全新的maven工程,我这里取名工程名 zyqok,各位随意 。
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/23501331Y-1.jpg)
文章插图
(1.2)在 pom.xml 里面加上 <dependencies>
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/235013B31-2.jpg)
文章插图
(1.3)创建 Test 类,好了工程就已经搭好了 。
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/235013E95-3.jpg)
文章插图
【2】Httpclient 实现网络请求(2.1)什么是 httpclient ?
Httpclient 是 Apache 的一个子项目,它是一个为 Java 可以实现网络请求的客户端工具包 。
简单的说,他是一个 Jar 包,有了他,我们通过 Java 程序就可以实现网络请求 。
(2.2) 复制下面的 httpclient 依赖,加入到 pom.xml 文件中 。
<!-- httpclient 核心包 --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency>
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/2350135220-4.jpg)
文章插图
(2.3)创建一个 HttpTool 的类,这个类我们专门用来实现网络请求相关方法 。
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/2350134509-5.jpg)
文章插图
(2.4) 为了避免其他网站侵权问题,下面以我个人网站一个页面为例(http://www.zyqok.cn/material/index),我们来抓取这个页面上的所有图片 。
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/235013M44-6.jpg)
文章插图
(2.5) 可以看得出,这是一个 get 请求,并且返回的是一个 html 页面 。所以我们在 HttpTool 类中加入一个如下方法体:
/*** 实现Get请求* @param url 请求地址* @return 页面内容*/public static String doGet(String url) {return null;}
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/2350136031-7.jpg)
文章插图
(2.6)复制代码,添加 get 实现方法:
// 构建get请求HttpGet get = new HttpGet(url);// 创建客户端CloseableHttpClient client = HttpClients.createDefault();try {// 客户端执行请求,获取响应HttpResponse response = client.execute(get);// 获取响应的页面内容InputStream in = response.getEntity().getContent();StringBuilder sb = new StringBuilder();byte[]b = new byte[102400];int length;while ((length = in.read(b)) != -1) {sb.Append(new String(b, 0, length, "utf-8"));}// 返回页面内容return sb.toString();} catch (Exception e) {e.printStackTrace();return null;}
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/2350134W8-8.jpg)
文章插图
(2.7)OK,网络请求相关实现类我们已经写好了,我们接下来测试下,我们在 Test 类的 main 方法里加入如下代码:
String html = HttpTool.doGet("http://www.zyqok.cn/material/index");System.out.println(html);
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/2350133936-9.jpg)
文章插图
(2.8)执行程序,查看结果 。可以看到我们确实已经通过请求,获取到网页的返回内容了 。
![Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页](http://img.jiangsulong.com/220420/2350131Y2-10.jpg)
文章插图
【3】Jsoup 解析网页在整个【2】的实现过程中,我们已经拿到网页返回的数据,但我们要的是整个网页中的图片,并不是这种杂乱无章的网页页面数据,那么我们该怎么办呢?简单,接下来我们需要用到另外一种技术了 ---- Jsoup 。
(3.1)什么是 Jsoup 技术?
下面是度娘给出的一个官方解释:Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容 。它提供了一套非常省力的API,可通过DOM,css以及类似于jQuery的操作方法来取出和操作数据(摘自百度) 。
下面再用我个人语言简单的总结下:Jsoup 技术就是用来处理各种 html 页面 和 xml 数据 。我们这里可以通过 Jsoup 来处理【2】中返回的 html 页面 。
【Java案例实战:Httpclient 实现网络请求 + Jsoup 解析网页】(3.2)加入 Jsoup 依赖
推荐阅读
- python开发app实战
- JDK和JRE-Java运行环境全面介绍
- 一文让你读懂JAVA.IO、字符编码、URL和Spring.Resource
- 骚操作实战撸进内网服务器
- Java通过shell脚本监控重启服务
- Java线程池深度揭秘
- AI人工智能:JAVA教你拍照识别文字 并语音播报
- JAVA程序员常用的几个工具类
- JAVA并发-AtomicInteger
- Java正则表达式详解