当前位置:首页 > 行业动态 > 正文

httpclient爬网站实例

使用Apache HttpClient爬取网页需创建CloseableHttpClient实例,配置HttpGet请求对象,执行execute方法获取响应,通过EntityUtils处理响应内容,注意捕获IOException并

环境准备

使用 HttpClient 进行网站爬取前,需确保引入相关依赖,以下以 Java 11+ 内置的 HttpClient 为例,无需额外添加第三方库。


发送 GET 请求

通过 HttpClient 发送 HTTP GET 请求,获取目标网页的 HTML 内容。

步骤 代码示例 说明
创建 HttpClient HttpClient client = HttpClient.newHttpClient(); 初始化客户端,支持异步请求
构建 HttpRequest java<br>HttpRequest request = HttpRequest.newBuilder()<br>&nbsp; ·&nbsp;.uri(URI.create("https://example.com"))<br>&nbsp; ·&nbsp;.GET()<br>&nbsp; ·&nbsp;.build(); 设置目标 URL 和请求方法(GET)
发送请求并获取响应 java<br>HttpResponse<String> response =<br> client.send(request, BodyHandlers.ofString()); 同步发送请求,以字符串形式接收响应体

处理响应数据

从响应中提取状态码、头信息和正文内容。

httpclient爬网站实例  第1张

响应属性 代码示例 说明
状态码 int statusCode = response.statusCode(); 检查是否成功(如 200)
响应头 Map<String, List<String>> headers = response.headers().map(); 获取 Content-Type 等头信息
响应体(HTML) String body = response.body(); 网页源代码,可用于后续解析

异常处理

处理网络超时、连接失败等异常情况。

异常类型 处理方式 说明
IOException java<br>try {<br> // 发送请求<br>} catch (IOException e) {<br> e.printStackTrace();<br>} 捕获网络相关的 I/O 异常
InterruptedException java<br>try {<br> // 异步请求处理<br>} catch (InterruptedException e) {<br> Thread.currentThread().interrupt();<br>} 处理线程中断(异步请求时)

完整示例代码

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.IOException;
import java.util.Map;
public class HttpClientExample {
    public static void main(String[] args) {
        // 初始化 HttpClient
        HttpClient client = HttpClient.newHttpClient();
        // 构建请求
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://example.com"))
            .GET()
            .build();
        try {
            // 发送请求并获取响应
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            // 处理响应
            System.out.println("状态码: " + response.statusCode());
            System.out.println("响应头: " + response.headers().map());
            System.out.println("响应体: " + response.body());
        } catch (IOException | InterruptedException e) {
            // 异常处理
            e.printStackTrace();
        }
    }
}

相关问题与解答

问题 1:如何模拟浏览器发送请求(设置 User-Agent)?

解答
在构建 HttpRequest 时,通过 .header() 方法添加 User-Agent 头,

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://example.com"))
    .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
    .GET()
    .build();

说明:部分网站会检测 User-Agent,模拟浏览器可绕过简单反爬虫机制。


问题 2:如何爬取需要携带 Cookie 的页面?

解答
通过 HttpRequest.newBuilder().cookie(...) 或使用 HttpClientCookieManager 管理 Cookie。

// 添加 Cookie
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://example.com"))
    .cookie("session_id", "abc123")
    .GET()
    .build();

说明:若需自动处理 Cookie(如登录后爬取),需结合 CookieManager

0